eureka-manager-cli 0.3.0

The official cli for the eureka-mmanager
Documentation
use actix::{Actor, System};
use clap::Parser;
use eureka_manager_cli::{
    commands::{AsyncRun, AsyncRunContext},
    Cli,
};
use eureka_mmanager::{
    prelude::{DirsOptions, DirsOptionsCore},
    DownloadManager,
};
use indicatif::MultiProgress;
use indicatif_log_bridge::LogWrapper;
use reqwest::header::{HeaderMap, HeaderValue, USER_AGENT};

#[cfg_attr(feature = "hotpath", hotpath::main)]
fn main() {
    let sys = System::new();
    let progress = MultiProgress::new();
    let cli = Cli::parse();
    let (filter, log) = cli.setup_logger();
    log::set_max_level(filter);
    if let Err(err) = log::set_boxed_logger(Box::new(LogWrapper::new(progress.clone(), log))) {
        eprintln!("{err}");
    }
    let name = clap::crate_name!();
    let version = clap::crate_name!();
    let manager = {
        let options = {
            let dirs_options: DirsOptions = {
                let o: DirsOptionsCore = cli.options.clone().into();
                o.into()
            };
            sys.block_on(async move { dirs_options.start() })
        };
        let mangadex_client = mangadex_api::MangaDexClient::new({
            let mut builder = reqwest::Client::builder().default_headers({
                let mut headers = HeaderMap::new();
                headers.insert(
                    USER_AGENT,
                    HeaderValue::from_str(format!("{name}/{version}").as_str()).unwrap(),
                );
                headers
            });
            if let Some(dura) = cli.request_timeout.as_ref() {
                builder = builder.timeout(**dura);
            }
            builder.build().unwrap()
        });
        sys.block_on(async move { DownloadManager::new(options, mangadex_client).start() })
    };
    let ctx = AsyncRunContext { manager, progress };
    sys.block_on(cli.commands.run(ctx)).unwrap();
}