diff --git a/src/main.rs b/src/main.rs index d839589..67b34a8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,9 +9,10 @@ mod torrent; mod trackers; use anyhow::Result; +use config::Config; use debug::Debug; use index::Index; -use preload::Preload; +use peers::Peers; use rss::Rss; use std::{collections::HashSet, num::NonZero, path::PathBuf, time::Duration}; use torrent::Torrent; @@ -28,20 +29,17 @@ async fn main() -> Result<()> { use tokio::time; // init components - let config = config::Config::parse(); + let config = Config::parse(); let debug = Debug::init(&config.debug)?; - let peers = peers::Peers::init(&config.initial_peer)?; - let preload = config.preload.map(|ref p| { - Preload::init( - p, - config.preload_regex, - config.preload_max_filecount, - config.preload_max_filesize, - config.preload_total_size, - config.clear, - ) - .unwrap() - }); + let peers = Peers::init(&config.initial_peer)?; + let preload = preload::init( + config.preload, + config.preload_regex, + config.preload_max_filecount, + config.preload_max_filesize, + config.preload_total_size, + config.clear, + )?; let trackers = Trackers::init(&config.tracker)?; let torrent = config.export_torrents.map(|p| Torrent::init(&p).unwrap()); let session = librqbit::Session::new_with_opts( diff --git a/src/preload.rs b/src/preload.rs index f59f0da..e8ea46f 100644 --- a/src/preload.rs +++ b/src/preload.rs @@ -11,7 +11,7 @@ pub struct Preload { } impl Preload { - pub fn init( + fn init( directory: &str, regex: Option, max_filecount: Option, @@ -89,3 +89,35 @@ impl Preload { self.regex.as_ref().is_some_and(|r| r.is_match(pattern)) } } + +/// Init `Preload` with validate related argument options +pub fn init( + path: Option, + regex: Option, + max_filecount: Option, + max_filesize: Option, + total_size: Option, + clear: bool, +) -> Result> { + Ok(match path { + Some(ref p) => Some(Preload::init( + p, + regex, + max_filecount, + max_filesize, + total_size, + clear, + )?), + None => { + if regex.is_some() + || max_filecount.is_some() + || max_filesize.is_some() + || total_size.is_some() + || clear + { + bail!("`--preload` directory is required for this configuration!") + } + None + } + }) +}