mod downloader; #[cfg(feature = "gui")] mod gui; // --------------------------------------------------------------------------- // GUI entry point (when the "gui" feature is enabled) // --------------------------------------------------------------------------- #[cfg(feature = "gui")] fn main() -> eframe::Result<()> { let options = eframe::NativeOptions { viewport: egui::ViewportBuilder::default() .with_inner_size([800.0, 650.0]) .with_min_inner_size([600.0, 400.0]), ..Default::default() }; eframe::run_native( "Factorio Mod Downloader", options, Box::new(|_cc| Ok(Box::new(gui::App::new()))), ) } // --------------------------------------------------------------------------- // CLI entry point (when the "gui" feature is disabled) // --------------------------------------------------------------------------- #[cfg(not(feature = "gui"))] fn main() { let args: Vec = std::env::args().collect(); if args.len() < 2 { eprintln!("Factorio Mod Downloader (CLI)"); eprintln!(); eprintln!( "Usage: {} [output_directory] [options]", args[0] ); eprintln!(); eprintln!("Options:"); eprintln!(" --version Download a specific version instead of latest"); eprintln!(" --include-optional Also download optional dependencies"); eprintln!(); eprintln!("Examples:"); eprintln!(" {} my-cool-mod", args[0]); eprintln!( " {} https://mods.factorio.com/mod/my-cool-mod ./mods", args[0] ); eprintln!( " {} my-cool-mod ./mods --version 2.1.0 --include-optional", args[0] ); std::process::exit(1); } let mod_url = &args[1]; let output = if args.len() >= 3 && !args[2].starts_with("--") { std::path::PathBuf::from(&args[2]) } else { std::env::current_dir().unwrap_or_else(|_| std::path::PathBuf::from(".")) }; let mut target_version: Option<&str> = None; let mut include_optional = false; let mut i = if args.len() >= 3 && !args[2].starts_with("--") { 3 } else { 2 }; while i < args.len() { match args[i].as_str() { "--version" => { if i + 1 < args.len() { target_version = Some(&args[i + 1]); i += 1; } else { eprintln!("Error: --version requires a value"); std::process::exit(1); } } "--include-optional" => { include_optional = true; } other => { eprintln!("Unknown option: {other}"); std::process::exit(1); } } i += 1; } match downloader::run_cli_download(mod_url, &output, target_version, include_optional) { Ok(()) => {} Err(e) => { eprintln!("Error: {:#}", e); std::process::exit(1); } } }