From 7df4ceb1cf2a6edc058d28527140598ca90e1f10 Mon Sep 17 00:00:00 2001 From: salmonik Date: Sat, 11 Jul 2026 13:32:48 +0200 Subject: init --- src/main.rs | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/main.rs (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..78f17f8 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,102 @@ +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); + } + } +} -- cgit v1.2.3