From eb08fd76ffbb5f16c5644547aaaa9e7f1249ee4d Mon Sep 17 00:00:00 2001 From: Akshay Date: Sun, 21 May 2023 18:52:29 +0530 Subject: spice up ui --- src/main.rs | 89 ++++++++++++++++++++++++------------------------------------- 1 file changed, 35 insertions(+), 54 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 65de274..8c94843 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,47 +1,7 @@ +use chrono::{naive::Days, prelude::*}; use clap::{Args, Parser, Subcommand, ValueEnum}; use syn::{manager::Manager, PrintResult}; -// #[tokio::main(flavor = "current_thread")] -// async fn main() { -// let mut manager = Manager::load().unwrap(); -// -// let feeds = vec![ -// "https://peppe.rs/index.xml", -// "https://jvns.ca/atom.xml", -// // "https://www.youtube.com/feeds/videos.xml?channel_id=UCuTaETsuCOkJ0H_GAztWt0Q", -// ]; -// -// for f in feeds { -// match manager.add_feed(f).await { -// Ok(s) => println!("{s}"), -// Err(e) => println!("{e}"), -// } -// } -// -// for entry in manager.list_entries() { -// println!("{entry}"); -// } -// -// match manager.store() { -// Ok(s) => println!("{s}"), -// Err(e) => eprintln!("{e}"), -// } -// -// // let mut feed = Feed::new(url); -// -// // feed.resolve().await.unwrap(); -// -// // let last_read = DateTime::parse_from_rfc2822("Mon, 16 Mar 2020 18:30:00 +0000") -// // .unwrap() -// // .with_timezone(&Utc); -// -// // feed.last_read = last_read; -// -// // for i in feed.unread().unwrap() { -// // println!("{}", i.title.as_ref().unwrap().content) -// // } -// } - #[derive(Parser)] #[command(author, version, about, long_about = None)] struct Cli { @@ -51,20 +11,31 @@ struct Cli { #[derive(Subcommand)] enum Command { + /// track a new feed Add(AddCommand), - List(ListCommand), + /// list all entries in reverse chronological order + ListEntries(ListEntriesCommand), + /// list all feeds in reverse chronological order + ListFeeds, + /// refresh feeds Pull(PullCommand), } +impl Default for Command { + fn default() -> Self { + Self::ListEntries(ListEntriesCommand { cutoff: None }) + } +} + #[derive(Args)] struct AddCommand { url: String, } #[derive(Args)] -struct ListCommand { - #[arg(value_enum)] - target: ListTarget, +struct ListEntriesCommand { + #[arg(value_name = "CUTOFF")] + cutoff: Option, } #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)] @@ -81,8 +52,8 @@ struct PullCommand { #[tokio::main(flavor = "current_thread")] async fn main() { let opts = Cli::parse(); - match &opts.command { - Some(Command::Add(AddCommand { url })) => { + match &opts.command.unwrap_or_default() { + Command::Add(AddCommand { url }) => { let mut manager = Manager::load().unwrap_or_else(|e| { eprintln!("{e}"); Manager::default() @@ -91,17 +62,28 @@ async fn main() { manager.add_feed(&url).await.print(); manager.store().print(); } - Some(Command::List(ListCommand { target })) => { + Command::ListFeeds => { + let manager = Manager::load().unwrap_or_else(|e| { + eprintln!("{e}"); + Manager::default() + }); + manager.list_feeds().for_each(|f| println!("{f}")); + } + Command::ListEntries(ListEntriesCommand { cutoff }) => { let manager = Manager::load().unwrap_or_else(|e| { eprintln!("{e}"); Manager::default() }); - match target { - ListTarget::Feeds => manager.list_feeds().for_each(|f| println!("{f}")), - ListTarget::Entries => manager.list_entries().for_each(|f| println!("{f}")), - } + manager + .list_entries() + .filter(|entry| { + cutoff + .map(|c| Utc::now() - Days::new(c) <= entry.published) + .unwrap_or(true) + }) + .for_each(|f| println!("{f}")); } - Some(Command::Pull(PullCommand { .. })) => { + Command::Pull(PullCommand { .. }) => { let mut manager = Manager::load().unwrap_or_else(|e| { eprintln!("{e}"); Manager::default() @@ -112,6 +94,5 @@ async fn main() { errors.iter().for_each(PrintResult::print); manager.store().print(); } - _ => {} } } -- cgit v1.2.3