diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/app.rs | 31 | ||||
| -rw-r--r-- | src/event.rs | 1 | ||||
| -rw-r--r-- | src/main.rs | 51 |
3 files changed, 83 insertions, 0 deletions
diff --git a/src/app.rs b/src/app.rs new file mode 100644 index 0000000..87caf62 --- /dev/null +++ b/src/app.rs @@ -0,0 +1,31 @@ +use std::io::{stdout, Stdout}; + +use rand::Rng; +use tokio::sync::mpsc::{channel, Receiver, Sender}; + +use crate::event::Event; + +pub struct App { + stdout: Stdout, + quote: Vec<String>, + event_tx: Sender<Event>, + event_rx: Receiver<Event>, +} + +impl App { + pub fn new(quotes: &[Vec<String>]) -> App { + let mut rng = rand::thread_rng(); + let chosen = rng.gen_range(0..quotes.len()); + let (event_tx, event_rx): (Sender<Event>, Receiver<Event>) = channel(10); + App { + stdout: stdout(), + quote: quotes[chosen].clone(), + event_rx, + event_tx, + } + } + + pub fn run() { + todo!() + } +} diff --git a/src/event.rs b/src/event.rs new file mode 100644 index 0000000..7c470eb --- /dev/null +++ b/src/event.rs @@ -0,0 +1 @@ +pub enum Event {} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..ba5277e --- /dev/null +++ b/src/main.rs @@ -0,0 +1,51 @@ +mod app; +pub mod event; + +use std::{error::Error, fs::read_to_string, path::Path}; + +use clap::Parser; + +#[derive(Parser)] +struct Args { + #[arg(short, long)] + quote_folder: String, +} + +fn generate_quotes(path: &Path) -> Result<Vec<Vec<String>>, Box<dyn Error>> { + let mut ris = Vec::new(); + if path.is_file() { + ris.push( + read_to_string(path)? + .trim() + .split_whitespace() + .filter(|s| !s.is_empty()) + .map(|s| s.to_string()) + .collect(), + ); + } else { + for f in path.read_dir()? { + if f.is_err() { + continue; + } + let v = f.unwrap().path(); + if v.is_file() { + ris.push( + read_to_string(v)? + .trim() + .split_whitespace() + .filter(|s| !s.is_empty()) + .map(|s| s.to_string()) + .collect(), + ); + } + } + } + return Ok(ris); +} + +#[tokio::main] +async fn main() { + let args = Args::parse(); + let path = Path::new(&args.quote_folder); + let quotes = generate_quotes(&path).unwrap(); +} |
