From e43037aa525e36d7a3da187a8fc6baeb71db7fd6 Mon Sep 17 00:00:00 2001 From: clerie Date: Sat, 26 Apr 2025 13:44:28 +0200 Subject: [PATCH] Specify maximum age of feed items to be displayed in feed file --- src/main.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/main.rs b/src/main.rs index 0493ff4..8beac73 100644 --- a/src/main.rs +++ b/src/main.rs @@ -56,11 +56,13 @@ fn fetch_feed(url: impl IntoUrl) -> Result { struct FeedFile { name: String, + skip_items_older_than: Option, urls: Vec, } fn read_feed_file(path: &str) -> Result { let mut name = String::from(path); + let mut skip_items_older_than_seconds: Option = None; let mut urls = Vec::new(); for line in std::fs::read_to_string(path)?.lines() { @@ -72,6 +74,12 @@ fn read_feed_file(path: &str) -> Result { name = String::from(&line[8..]); continue; } + if line.starts_with("# skip-items-older-than: ") { + let skip_items_older_than_string = String::from(&line[25..]); + skip_items_older_than_seconds = Some(skip_items_older_than_string.parse::() + .context("Failed to read duration from skip-items-older-than")?); + continue; + } if line.starts_with("#") { continue; } @@ -82,6 +90,7 @@ fn read_feed_file(path: &str) -> Result { Ok(FeedFile{ name: name, + skip_items_older_than: skip_items_older_than_seconds.map(|s| chrono::Duration::seconds(s)), urls: urls, }) } @@ -108,8 +117,16 @@ fn make_feed_item(entry: Entry) -> Result { fn main() -> Result<()> { let cli = Cli::parse(); + println!("Loading feeds from: {}", &cli.feeds); + let feed_file = read_feed_file(&cli.feeds)?; + let skip_items_from_before = feed_file.skip_items_older_than.map(|d| chrono::Utc::now() - d); + if let Some(before_time) = skip_items_from_before { + println!("Skip items from before: {}", before_time); + }; + + let mut items: Vec = Vec::new(); for feed_url in feed_file.urls { @@ -126,6 +143,12 @@ fn main() -> Result<()> { for entry in feed_entries { match make_feed_item(entry) { Ok(item) => { + if let Some(before_time) = skip_items_from_before { + if before_time > item.time { + continue; + } + } + items.push(item); }, Err(e) => {