diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 138 |
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 @@ | |||
1 | use syn::manager::Manager; | 1 | use clap::{Args, Parser, Subcommand, ValueEnum}; |
2 | use syn::{manager::Manager, PrintResult}; | ||
2 | 3 | ||
3 | #[tokio::main(flavor = "current_thread")] | 4 | // #[tokio::main(flavor = "current_thread")] |
4 | async 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 | } | 47 | struct Cli { |
48 | #[command(subcommand)] | ||
49 | command: Option<Command>, | ||
50 | } | ||
23 | 51 | ||
24 | // let mut feed = Feed::new(url); | 52 | #[derive(Subcommand)] |
53 | enum Command { | ||
54 | Add(AddCommand), | ||
55 | List(ListCommand), | ||
56 | Pull(PullCommand), | ||
57 | } | ||
25 | 58 | ||
26 | // feed.resolve().await.unwrap(); | 59 | #[derive(Args)] |
60 | struct 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() | 65 | struct 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)] |
71 | enum 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) | 77 | struct PullCommand { |
36 | // } | 78 | target: Option<String>, |
79 | } | ||
80 | |||
81 | #[tokio::main(flavor = "current_thread")] | ||
82 | async 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 | } |