diff --git a/CREDITS b/CREDITS index 2bfb498..0e681df 100644 --- a/CREDITS +++ b/CREDITS @@ -37,6 +37,7 @@ Kieran <42723993+EnderDev@users.noreply.github.com> Kieran Kyle Roth Laurențiu Nicola +Lena <102762572+MarshDeer@users.noreply.github.com> Mario A <10923513+Midblyte@users.noreply.github.com> Matthew Crossman Matthew E @@ -47,6 +48,7 @@ Nathan Moos Nicholas Christopher Nick Lowery Nico +NKIPSC <15067635+NKIPSC@users.noreply.github.com> obeho <71698631+obeho@users.noreply.github.com> obscurity Om G <34579088+OxyMagnesium@users.noreply.github.com> diff --git a/Cargo.lock b/Cargo.lock index fd537f6..f64eb3d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -211,9 +211,9 @@ checksum = "3a4f925191b4367301851c6d99b09890311d74b0d43f274c0b34c86d308a3663" [[package]] name = "cc" -version = "1.0.74" +version = "1.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581f5dba903aac52ea3feb5ec4810848460ee833876f1f9b0fdeab1f19091574" +checksum = "76a284da2e6fe2092f2353e51713435363112dfd60030e22add80be333fb928f" [[package]] name = "cfg-if" @@ -223,9 +223,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.0.18" +version = "4.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335867764ed2de42325fafe6d18b8af74ba97ee0c590fa016f157535b42ab04b" +checksum = "60494cedb60cb47462c0ff7be53de32c0e42a6fc2c772184554fa12bd9489c03" dependencies = [ "bitflags", "clap_lex", @@ -543,9 +543,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.22" +version = "0.14.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abfba89e19b959ca163c7752ba59d737c1ceea53a5d31a149c805446fc958064" +checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" dependencies = [ "bytes", "futures-channel", @@ -664,7 +664,7 @@ dependencies = [ [[package]] name = "libreddit" -version = "0.23.2" +version = "0.24.0" dependencies = [ "askama", "async-recursion", @@ -777,15 +777,6 @@ dependencies = [ "libc", ] -[[package]] -name = "num_threads" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" -dependencies = [ - "libc", -] - [[package]] name = "once_cell" version = "1.16.0" @@ -800,9 +791,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "os_str_bytes" -version = "6.3.1" +version = "6.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3baf96e39c5359d2eb0dd6ccb42c62b91d9678aa68160d261b9e0ccbf9e9dea9" +checksum = "7b5bf27447411e9ee3ff51186bf7a08e16c341efdde93f4d823e8844429bed7e" [[package]] name = "parking" @@ -853,9 +844,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro2" @@ -916,9 +907,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" dependencies = [ "aho-corasick", "memchr", @@ -927,9 +918,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.27" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "ring" @@ -1211,13 +1202,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fab5c8b9980850e06d92ddbe3ab839c062c801f3927c0fb8abd6fc8e918fbca" +checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" dependencies = [ "itoa", - "libc", - "num_threads", "serde", "time-core", "time-macros", @@ -1231,9 +1220,9 @@ checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" [[package]] name = "time-macros" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bb801831d812c562ae7d2bfb531f26e66e4e1f6b17307ba4149c5064710e5b" +checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" dependencies = [ "time-core", ] diff --git a/Cargo.toml b/Cargo.toml index da1ee8a..b638940 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ name = "libreddit" description = " Alternative private front-end to Reddit" license = "AGPL-3.0" repository = "https://github.com/spikecodes/libreddit" -version = "0.23.2" +version = "0.24.0" authors = ["spikecodes <19519553+spikecodes@users.noreply.github.com>"] edition = "2021" @@ -11,18 +11,18 @@ edition = "2021" askama = { version = "0.11.1", default-features = false } async-recursion = "1.0.0" cached = "0.40.0" -clap = { version = "4.0.18", default-features = false, features = ["std"] } -regex = "1.6.0" +clap = { version = "4.0.24", default-features = false, features = ["std"] } +regex = "1.7.0" serde = { version = "1.0.147", features = ["derive"] } cookie = "0.16.1" futures-lite = "1.12.0" -hyper = { version = "0.14.22", features = ["full"] } +hyper = { version = "0.14.23", features = ["full"] } hyper-rustls = "0.23.0" percent-encoding = "2.2.0" route-recognizer = "0.3.1" serde_json = "1.0.87" tokio = { version = "1.21.2", features = ["full"] } -time = "0.3.16" +time = "0.3.17" url = "2.3.1" rust-embed = { version = "6.4.2", features = ["include-exclude"] } libflate = "1.2.0" diff --git a/README.md b/README.md index f80f5d7..ed7aa30 100644 --- a/README.md +++ b/README.md @@ -188,7 +188,7 @@ Assign a default value for each setting by passing environment variables to Libr | Name | Possible values | Default value | |-------------------------|-----------------------------------------------------------------------------------------------------|---------------| -| `THEME` | `["system", "light", "dark", "black", "dracula", "nord", "laserwave", "violet", "gold", "rosebox"]` | `system` | +| `THEME` | `["system", "light", "dark", "black", "dracula", "nord", "laserwave", "violet", "gold", "rosebox", "gruvboxdark", "gruvboxlight"]` | `system` | | `FRONT_PAGE` | `["default", "popular", "all"]` | `default` | | `LAYOUT` | `["card", "clean", "compact"]` | `card` | | `WIDE` | `["on", "off"]` | `off` | diff --git a/src/client.rs b/src/client.rs index da78304..f577f95 100644 --- a/src/client.rs +++ b/src/client.rs @@ -158,10 +158,21 @@ fn request(method: &'static Method, path: String, redirect: bool, quarantine: bo method, response .headers() - .get("Location") + .get(header::LOCATION) .map(|val| { - let new_url = percent_encode(val.as_bytes(), CONTROLS).to_string(); - format!("{}{}raw_json=1", new_url, if new_url.contains('?') { "&" } else { "?" }) + // We need to make adjustments to the URI + // we get back from Reddit. Namely, we + // must: + // + // 1. Remove the authority (e.g. + // https://www.reddit.com) that may be + // present, so that we recurse on the + // path (and query parameters) as + // required. + // + // 2. Percent-encode the path. + let new_path = percent_encode(val.as_bytes(), CONTROLS).to_string().trim_start_matches(REDDIT_URL_BASE).to_string(); + format!("{}{}raw_json=1", new_path, if new_path.contains('?') { "&" } else { "?" }) }) .unwrap_or_default() .to_string(), diff --git a/src/post.rs b/src/post.rs index 5f3142a..d2843c7 100644 --- a/src/post.rs +++ b/src/post.rs @@ -155,7 +155,8 @@ async fn parse_post(json: &serde_json::Value) -> Post { }, flags: Flags { nsfw: post["data"]["over_18"].as_bool().unwrap_or(false), - stickied: post["data"]["stickied"].as_bool().unwrap_or(false), + stickied: post["data"]["stickied"].as_bool().unwrap_or(false) + || post["data"]["pinned"].as_bool().unwrap_or(false), }, domain: val(post, "domain"), rel_time, diff --git a/src/utils.rs b/src/utils.rs index 0f15537..9d58e31 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -319,7 +319,7 @@ impl Post { }, flags: Flags { nsfw: data["over_18"].as_bool().unwrap_or_default(), - stickied: data["stickied"].as_bool().unwrap_or_default(), + stickied: data["stickied"].as_bool().unwrap_or_default() || data["pinned"].as_bool().unwrap_or_default(), }, permalink: val(post, "permalink"), rel_time, diff --git a/static/themes/gruvboxdark.css b/static/themes/gruvboxdark.css new file mode 100644 index 0000000..fb9e3ee --- /dev/null +++ b/static/themes/gruvboxdark.css @@ -0,0 +1,13 @@ +/* Gruvbox-Dark theme setting */ +.gruvboxdark { + --accent: #8ec07c; + --green: #b8bb26; + --text: #ebdbb2; + --foreground: #3c3836; + --background: #282828; + --outside: #3c3836; + --post: #3c3836; + --panel-border: 1px solid #504945; + --highlighted: #282828; + --shadow: 0 1px 3px rgba(0, 0, 0, 0.5); +} diff --git a/static/themes/gruvboxlight.css b/static/themes/gruvboxlight.css new file mode 100644 index 0000000..d39f8e9 --- /dev/null +++ b/static/themes/gruvboxlight.css @@ -0,0 +1,13 @@ +/* Gruvbox-Light theme setting */ +.gruvboxlight { + --accent: #427b58; + --green: #79740e; + --text: #3c3836; + --foreground: #ebdbb2; + --background: #fbf1c7; + --outside: #ebdbb2; + --post: #ebdbb2; + --panel-border: 1px solid #d5c4a1; + --highlighted: #fbf1c7; + --shadow: 0 1px 3px rgba(0, 0, 0, 0.25); +}