mirror of
https://github.com/YGGverse/btracker.git
synced 2026-03-31 17:15:31 +00:00
implement format getters
This commit is contained in:
parent
9291328401
commit
c5a0684466
4 changed files with 50 additions and 44 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::{Torrent, format};
|
use crate::Torrent;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
/// Export crawl index to the RSS file
|
/// Export crawl index to the RSS file
|
||||||
|
|
@ -68,11 +68,11 @@ impl Feed {
|
||||||
.map(|b| b.to_string())
|
.map(|b| b.to_string())
|
||||||
.unwrap_or("?".into()) // @TODO
|
.unwrap_or("?".into()) // @TODO
|
||||||
),
|
),
|
||||||
escape(format::magnet(&torrent.info_hash, self.trackers.as_ref()))
|
escape(torrent.magnet(self.trackers.as_ref()))
|
||||||
));
|
));
|
||||||
|
|
||||||
buffer.push_str("<description>");
|
buffer.push_str("<description>");
|
||||||
buffer.push_str(&escape(format::bytes(torrent.size)));
|
buffer.push_str(&format!("{}\n{}", torrent.size(), torrent.files()));
|
||||||
buffer.push_str("</description>");
|
buffer.push_str("</description>");
|
||||||
|
|
||||||
buffer.push_str("<pubDate>");
|
buffer.push_str("<pubDate>");
|
||||||
|
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
pub fn bytes(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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn magnet(info_hash: &str, trackers: Option<&Vec<url::Url>>) -> String {
|
|
||||||
let mut b = if info_hash.len() == 40 {
|
|
||||||
format!("magnet:?xt=urn:btih:{info_hash}")
|
|
||||||
} else {
|
|
||||||
todo!("info-hash v2 yet not supported") // librqbit_core::hash_id::Id
|
|
||||||
};
|
|
||||||
if let Some(t) = trackers {
|
|
||||||
for tracker in t {
|
|
||||||
b.push_str("&tr=");
|
|
||||||
b.push_str(&urlencoding::encode(tracker.as_str()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
b
|
|
||||||
}
|
|
||||||
13
src/main.rs
13
src/main.rs
|
|
@ -3,13 +3,13 @@ extern crate rocket;
|
||||||
|
|
||||||
mod config;
|
mod config;
|
||||||
mod feed;
|
mod feed;
|
||||||
mod format;
|
|
||||||
mod scraper;
|
mod scraper;
|
||||||
mod storage;
|
mod storage;
|
||||||
mod torrent;
|
mod torrent;
|
||||||
|
|
||||||
use config::Config;
|
use config::Config;
|
||||||
use feed::Feed;
|
use feed::Feed;
|
||||||
|
use plurify::Plurify;
|
||||||
use rocket::{
|
use rocket::{
|
||||||
State,
|
State,
|
||||||
http::Status,
|
http::Status,
|
||||||
|
|
@ -41,8 +41,6 @@ fn index(
|
||||||
storage: &State<Storage>,
|
storage: &State<Storage>,
|
||||||
meta: &State<Meta>,
|
meta: &State<Meta>,
|
||||||
) -> Result<Template, Custom<String>> {
|
) -> Result<Template, Custom<String>> {
|
||||||
use plurify::Plurify;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[serde(crate = "rocket::serde")]
|
#[serde(crate = "rocket::serde")]
|
||||||
struct Row {
|
struct Row {
|
||||||
|
|
@ -81,13 +79,10 @@ fn index(
|
||||||
.creation_date
|
.creation_date
|
||||||
.map(|t| t.format(&meta.format_time).to_string()),
|
.map(|t| t.format(&meta.format_time).to_string()),
|
||||||
indexed: torrent.time.format(&meta.format_time).to_string(),
|
indexed: torrent.time.format(&meta.format_time).to_string(),
|
||||||
magnet: format::magnet(&torrent.info_hash, meta.trackers.as_ref()),
|
magnet: torrent.magnet(meta.trackers.as_ref()),
|
||||||
scrape: scraper.scrape(&torrent.info_hash),
|
scrape: scraper.scrape(&torrent.info_hash),
|
||||||
size: format::bytes(torrent.size),
|
size: torrent.size(),
|
||||||
files: torrent.files.as_ref().map_or("1 file".into(), |f| {
|
files: torrent.files(),
|
||||||
let l = f.len();
|
|
||||||
format!("{l} {}", l.plurify(&["file", "files", "files"]))
|
|
||||||
}),
|
|
||||||
torrent,
|
torrent,
|
||||||
}),
|
}),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
|
|
||||||
|
|
@ -76,4 +76,47 @@ impl Torrent {
|
||||||
time,
|
time,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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 {
|
||||||
|
const KB: f32 = 1024.0;
|
||||||
|
const MB: f32 = KB * KB;
|
||||||
|
const GB: f32 = MB * KB;
|
||||||
|
|
||||||
|
let f = self.size as f32;
|
||||||
|
|
||||||
|
if f < KB {
|
||||||
|
format!("{} B", self.size)
|
||||||
|
} else if f < MB {
|
||||||
|
format!("{:.2} KB", f / KB)
|
||||||
|
} else if f < GB {
|
||||||
|
format!("{:.2} MB", f / MB)
|
||||||
|
} else {
|
||||||
|
format!("{:.2} GB", f / GB)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn magnet(&self, trackers: Option<&Vec<url::Url>>) -> String {
|
||||||
|
let mut b = if self.info_hash.len() == 40 {
|
||||||
|
format!("magnet:?xt=urn:btih:{}", self.info_hash)
|
||||||
|
} else {
|
||||||
|
todo!("info-hash v2 yet not supported") // librqbit_core::hash_id::Id
|
||||||
|
};
|
||||||
|
if let Some(t) = trackers {
|
||||||
|
for tracker in t {
|
||||||
|
b.push_str("&tr=");
|
||||||
|
b.push_str(&urlencoding::encode(tracker.as_str()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
b
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue