summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs138
1 files changed, 109 insertions, 29 deletions
diff --git a/src/main.rs b/src/main.rs
index fccc7fd..65de274 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,37 +1,117 @@
1use syn::manager::Manager; 1use clap::{Args, Parser, Subcommand, ValueEnum};
2use syn::{manager::Manager, PrintResult};
2 3
3#[tokio::main(flavor = "current_thread")] 4// #[tokio::main(flavor = "current_thread")]
4async fn main() { 5// async fn main() {
5 let mut manager = Manager::default(); 6// let mut manager = Manager::load().unwrap();
6 7//
7 let feeds = vec![ 8// let feeds = vec![
8 "https://peppe.rs/index.xml", 9// "https://peppe.rs/index.xml",
9 "https://jvns.ca/atom.xml", 10// "https://jvns.ca/atom.xml",
10 // "https://www.youtube.com/feeds/videos.xml?channel_id=UCuTaETsuCOkJ0H_GAztWt0Q", 11// // "https://www.youtube.com/feeds/videos.xml?channel_id=UCuTaETsuCOkJ0H_GAztWt0Q",
11 ]; 12// ];
12 13//
13 for f in feeds { 14// for f in feeds {
14 match manager.add_feed(f).await { 15// match manager.add_feed(f).await {
15 Ok(s) => println!("{s}"), 16// Ok(s) => println!("{s}"),
16 Err(e) => println!("{e}"), 17// Err(e) => println!("{e}"),
17 } 18// }
18 } 19// }
20//
21// for entry in manager.list_entries() {
22// println!("{entry}");
23// }
24//
25// match manager.store() {
26// Ok(s) => println!("{s}"),
27// Err(e) => eprintln!("{e}"),
28// }
29//
30// // let mut feed = Feed::new(url);
31//
32// // feed.resolve().await.unwrap();
33//
34// // let last_read = DateTime::parse_from_rfc2822("Mon, 16 Mar 2020 18:30:00 +0000")
35// // .unwrap()
36// // .with_timezone(&Utc);
37//
38// // feed.last_read = last_read;
39//
40// // for i in feed.unread().unwrap() {
41// // println!("{}", i.title.as_ref().unwrap().content)
42// // }
43// }
19 44
20 for entry in manager.list_entries() { 45#[derive(Parser)]
21 println!("{entry}"); 46#[command(author, version, about, long_about = None)]
22 } 47struct Cli {
48 #[command(subcommand)]
49 command: Option<Command>,
50}
23 51
24 // let mut feed = Feed::new(url); 52#[derive(Subcommand)]
53enum Command {
54 Add(AddCommand),
55 List(ListCommand),
56 Pull(PullCommand),
57}
25 58
26 // feed.resolve().await.unwrap(); 59#[derive(Args)]
60struct AddCommand {
61 url: String,
62}
27 63
28 // let last_read = DateTime::parse_from_rfc2822("Mon, 16 Mar 2020 18:30:00 +0000") 64#[derive(Args)]
29 // .unwrap() 65struct ListCommand {
30 // .with_timezone(&Utc); 66 #[arg(value_enum)]
67 target: ListTarget,
68}
31 69
32 // feed.last_read = last_read; 70#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
71enum ListTarget {
72 Feeds,
73 Entries,
74}
33 75
34 // for i in feed.unread().unwrap() { 76#[derive(Args)]
35 // println!("{}", i.title.as_ref().unwrap().content) 77struct PullCommand {
36 // } 78 target: Option<String>,
79}
80
81#[tokio::main(flavor = "current_thread")]
82async fn main() {
83 let opts = Cli::parse();
84 match &opts.command {
85 Some(Command::Add(AddCommand { url })) => {
86 let mut manager = Manager::load().unwrap_or_else(|e| {
87 eprintln!("{e}");
88 Manager::default()
89 });
90
91 manager.add_feed(&url).await.print();
92 manager.store().print();
93 }
94 Some(Command::List(ListCommand { target })) => {
95 let manager = Manager::load().unwrap_or_else(|e| {
96 eprintln!("{e}");
97 Manager::default()
98 });
99 match target {
100 ListTarget::Feeds => manager.list_feeds().for_each(|f| println!("{f}")),
101 ListTarget::Entries => manager.list_entries().for_each(|f| println!("{f}")),
102 }
103 }
104 Some(Command::Pull(PullCommand { .. })) => {
105 let mut manager = Manager::load().unwrap_or_else(|e| {
106 eprintln!("{e}");
107 Manager::default()
108 });
109 let (status, errors): (Vec<_>, Vec<_>) =
110 manager.pull().await.into_iter().partition(Result::is_ok);
111 status.iter().for_each(PrintResult::print);
112 errors.iter().for_each(PrintResult::print);
113 manager.store().print();
114 }
115 _ => {}
116 }
37} 117}