diff --git a/Cargo.toml b/Cargo.toml index e775115..a0599b1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,5 +18,4 @@ chrono = { version = "0.4.41", features = ["serde"] } url = { version = "2.5", features = ["serde"] } urlencoding = "2.1" rocket_dyn_templates = { version = "0.2", features = ["tera"] } -plurify = "0.2" rand = "0.9" diff --git a/src/feed.rs b/src/feed.rs index 79fb586..b4a233d 100644 --- a/src/feed.rs +++ b/src/feed.rs @@ -70,7 +70,10 @@ impl Feed { self.buffer.push_str(""); self.buffer - .push_str(&format!("{}\n{}", torrent.size(), torrent.files())); + .push_str(&format!("size: {}", size(torrent.size))); + if let Some(f) = torrent.files() { + self.buffer.push_str(&format!(" / files: {f}")); + } self.buffer.push_str(""); self.buffer.push_str(""); @@ -87,6 +90,9 @@ impl Feed { } } +// @TODO use tera filters? +// https://keats.github.io/tera/docs/#built-in-filters + fn escape(value: &str) -> String { value .replace('&', "&") @@ -95,3 +101,21 @@ fn escape(value: &str) -> String { .replace('"', """) .replace("'", "'") } + +fn size(value: u64) -> String { + const KB: f32 = 1024.0; + const MB: f32 = KB * KB; + const GB: f32 = MB * KB; + + let f = value as f32; + + if f < KB { + format!("{value} B") + } else if f < MB { + format!("{:.2} KB", f / KB) + } else if f < GB { + format!("{:.2} MB", f / MB) + } else { + format!("{:.2} GB", f / GB) + } +} diff --git a/src/main.rs b/src/main.rs index 6e88822..055bc4d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,7 +11,6 @@ mod torrent; use config::Config; use feed::Feed; use meta::Meta; -use plurify::Plurify; use public::{Order, Public, Sort}; use rocket::{State, http::Status, response::content::RawXml, serde::Serialize}; use rocket_dyn_templates::{Template, context}; @@ -31,11 +30,11 @@ fn index( #[serde(crate = "rocket::serde")] struct R { created: Option, - files: String, + files: Option, indexed: String, magnet: String, scrape: Option, - size: String, + size: u64, torrent: Torrent, } let (total, torrents) = public @@ -85,7 +84,7 @@ fn index( indexed: torrent.time.format(&meta.format_time).to_string(), magnet: torrent.magnet(meta.trackers.as_ref()), scrape: scraper.scrape(&torrent.info_hash), - size: torrent.size(), + size: torrent.size, torrent }), Err(e) => { @@ -94,12 +93,9 @@ fn index( } }) .collect::>(), - pagination_totals: if total > 0 { Some(format!( - "Page {} / {} ({total} {} total)", - page.unwrap_or(1), - (total as f64 / public.default_limit as f64).ceil(), - total.plurify(&["torrent", "torrents", "torrents"]) - )) } else { None }, + page: page.unwrap_or(1), + pages: (total as f64 / public.default_limit as f64).ceil(), + total, search }, )) @@ -119,7 +115,7 @@ fn info( struct F { href: Option, path: String, - size: String, + size: u64, } let torrent = Torrent::from_public(&t.bytes, t.time).map_err(|e| { error!("Torrent parse error: `{e}`"); @@ -147,7 +143,7 @@ fn info( F { href: public.href(&torrent.info_hash, &p), path: p, - size: f.size(), + size: f.length, } }) .collect::>() @@ -155,7 +151,7 @@ fn info( indexed: torrent.time.format(&meta.format_time).to_string(), magnet: torrent.magnet(meta.trackers.as_ref()), scrape: scraper.scrape(&torrent.info_hash), - size: torrent.size(), + size: torrent.size, torrent }, )) diff --git a/src/torrent.rs b/src/torrent.rs index 124f9fb..eea2e6a 100644 --- a/src/torrent.rs +++ b/src/torrent.rs @@ -71,16 +71,8 @@ impl Torrent { // Format getters - pub fn files(&self) -> String { - use plurify::Plurify; - self.files.as_ref().map_or("1 file".into(), |f| { - let l = f.len(); - format!("{l} {}", l.plurify(&["file", "files", "files"])) - }) - } - - pub fn size(&self) -> String { - size(self.size) + pub fn files(&self) -> Option { + self.files.as_ref().map(|f| f.len()) } pub fn magnet(&self, trackers: Option<&Vec>) -> String { @@ -98,21 +90,3 @@ impl Torrent { b } } - -fn size(value: u64) -> String { - const KB: f32 = 1024.0; - const MB: f32 = KB * KB; - const GB: f32 = MB * KB; - - let f = value as f32; - - if f < KB { - format!("{value} B") - } else if f < MB { - format!("{:.2} KB", f / KB) - } else if f < GB { - format!("{:.2} MB", f / MB) - } else { - format!("{:.2} GB", f / GB) - } -} diff --git a/src/torrent/file.rs b/src/torrent/file.rs index ca0f109..c1b85b8 100644 --- a/src/torrent/file.rs +++ b/src/torrent/file.rs @@ -12,7 +12,4 @@ impl File { .map(|p| p.to_string_lossy().into()) .unwrap_or("?".into()) } - pub fn size(&self) -> String { - super::size(self.length) - } } diff --git a/templates/index.html.tera b/templates/index.html.tera index 9d79d62..e915bd4 100644 --- a/templates/index.html.tera +++ b/templates/index.html.tera @@ -10,8 +10,8 @@
  • {{ row.indexed }}
  • {% if row.created %}
  • ({{ row.created }})
  • {% endif %} - {% if row.size %}
  • {{ row.size }}
  • {% endif %} -
  • {{ row.files }}
  • +
  • {{ row.size | filesizeformat }}
  • + {% if row.files %}
  • {{ row.files }} file{{ row.files | pluralize(plural="s") }}
  • {% endif %} {% if row.scrape %}
  • {{ row.scrape.seeders }}
  • {{ row.scrape.peers }}
  • @@ -29,5 +29,9 @@ {% endif %} {% if next %}Next{% endif %} {% if back %}Back{% endif %} - {% if pagination_totals %}{{ pagination_totals }}{% endif %} + {% if total %} + + Page {{ page }} / {{ pages }} ({{ total }} torrent{{ total | pluralize(plural="s") }} total) + + {% endif %} {% endblock content %} \ No newline at end of file diff --git a/templates/info.html.tera b/templates/info.html.tera index 6221c73..7a9f0c2 100644 --- a/templates/info.html.tera +++ b/templates/info.html.tera @@ -6,9 +6,13 @@
    • {{ indexed }}
    • - {% if created %}
    • ({{ created }})
    • {% endif %} -
    • {{ size }}
    • -
    • {{ files_total }}
    • + {% if created %} +
    • ({{ created }})
    • + {% endif %} +
    • {{ size | filesizeformat }}
    • + {% if files_total %} +
    • {{ files_total }} file{{ files_total | pluralize(plural="s") }}
    • + {% endif %} {% if scrape %}
    • {{ scrape.seeders }}
    • {{ scrape.peers }}
    • @@ -38,7 +42,7 @@ {{ file.path }} {% endif %} - {{ file.size }} + {{ file.size | filesizeformat }} {% endfor %}