mod errors; pub mod feed; pub mod fetch; pub mod file; pub mod history; pub mod network; pub mod prelude; #[cfg(test)] mod test_utils; use fetch::FetchEnv; use file::FileEnv; use network::NetworkEnv; use prelude::*; pub struct Env { pub network: NetworkEnv, pub fetch: FetchEnv, pub file: FileEnv, } pub fn run(subscriptions: &str, history: &str, site: &str, e: Env) -> Result<()> { for channel_name in file::read::lines_from(subscriptions, &e.file)? { println!("Channel: {}", channel_name); let feed_url = feed::find(site, &channel_name, &e.network)?; for entry in feed::get(&feed_url, &e.network)?.entries() { if let Some(link) = entry.links().get(0).cloned() { if !history::find(&link, history, &e.file)? { println!("Downloading {}: {}", &channel_name, entry.title().as_str()); (e.fetch.download)(&link)?; history::add(&link, history)?; } } } } Ok(()) }