From 4de8a43c3adddebbeb2943784ef138269975e6df Mon Sep 17 00:00:00 2001 From: SpikeHD Date: Sat, 27 Aug 2022 00:54:14 -0700 Subject: [PATCH] begin CLI options --- package.json | 2 +- src-tauri/Cargo.lock | 27 +++++++- src-tauri/Cargo.toml | 1 + src-tauri/src/main.rs | 129 +++++++++++++++++++++++++------------- src-tauri/tauri.conf.json | 2 +- 5 files changed, 112 insertions(+), 49 deletions(-) diff --git a/package.json b/package.json index 8b20a57..6b73cfc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cultivation", - "version": "1.0.7", + "version": "1.0.8", "private": true, "dependencies": { "@tauri-apps/api": "^1.0.0-rc.5", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index d1251e8..caea46b 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -713,6 +713,16 @@ dependencies = [ "syn", ] +[[package]] +name = "ctrlc" +version = "3.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d91974fbbe88ec1df0c24a4f00f99583667a7e2e6272b2b92d294d81e462173" +dependencies = [ + "nix", + "winapi", +] + [[package]] name = "cty" version = "0.2.2" @@ -724,6 +734,7 @@ name = "cultivation" version = "0.1.0" dependencies = [ "cc", + "ctrlc", "duct", "file_diff", "futures-util", @@ -1910,9 +1921,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.126" +version = "0.2.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" [[package]] name = "libdbus-sys" @@ -2172,6 +2183,18 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +[[package]] +name = "nix" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb" +dependencies = [ + "autocfg", + "bitflags", + "cfg-if 1.0.0", + "libc", +] + [[package]] name = "nodrop" version = "0.1.14" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index f6fb564..18ab68e 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -62,6 +62,7 @@ regex = "1" # other file_diff = "1.0.0" rust-ini = "0.18.0" +ctrlc = "3.2.3" [features] # by default Tauri runs in production mode diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 645d845..448c924 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -4,7 +4,9 @@ )] use once_cell::sync::Lazy; +use std::io::Write; use std::{collections::HashMap, sync::Mutex}; +use tauri::async_runtime::block_on; use std::thread; use structs::APIQuery; @@ -23,57 +25,94 @@ mod web; static WATCH_GAME_PROCESS: Lazy> = Lazy::new(|| Mutex::new(String::new())); +fn try_flush() { + std::io::stdout().flush().unwrap_or(()) +} + +fn has_arg(args: &Vec, arg: &str) -> bool { + args.contains(&arg.to_string()) +} + +async fn arg_handler(args: &Vec) { + if has_arg(args, "--proxy") { + let mut pathbuf = tauri::api::path::data_dir().unwrap(); + pathbuf.push("cultivation"); + pathbuf.push("ca"); + + connect(8035, pathbuf.to_str().unwrap().to_string()).await; + } +} + fn main() { // Always set CWD to the location of the executable. let mut exe_path = std::env::current_exe().unwrap(); exe_path.pop(); std::env::set_current_dir(&exe_path).unwrap(); - tauri::Builder::default() - .invoke_handler(tauri::generate_handler![ - enable_process_watcher, - connect, - disconnect, - req_get, - get_bg_file, - is_game_running, - get_theme_list, - system_helpers::run_command, - system_helpers::run_program, - system_helpers::run_program_relative, - system_helpers::run_jar, - system_helpers::open_in_browser, - system_helpers::install_location, - system_helpers::is_elevated, - system_helpers::set_migoto_target, - system_helpers::wipe_registry, - proxy::set_proxy_addr, - proxy::generate_ca_files, - unzip::unzip, - file_helpers::rename, - file_helpers::dir_create, - file_helpers::dir_exists, - file_helpers::dir_is_empty, - file_helpers::dir_delete, - file_helpers::copy_file, - file_helpers::copy_file_with_new_name, - file_helpers::delete_file, - file_helpers::are_files_identical, - file_helpers::read_file, - file_helpers::write_file, - downloader::download_file, - downloader::stop_download, - lang::get_lang, - lang::get_languages, - web::valid_url, - web::web_get, - gamebanana::get_download_links, - gamebanana::list_submissions, - gamebanana::list_mods, - metadata_patcher::patch_metadata - ]) - .run(tauri::generate_context!()) - .expect("error while running tauri application"); + let args: Vec = std::env::args().collect(); + + block_on(arg_handler(&args)); + + // For disabled GUI + ctrlc::set_handler(|| { + std::process::exit(0); + }) + .unwrap_or(()); + + if !has_arg(&args, "--no-gui") { + tauri::Builder::default() + .invoke_handler(tauri::generate_handler![ + enable_process_watcher, + connect, + disconnect, + req_get, + get_bg_file, + is_game_running, + get_theme_list, + system_helpers::run_command, + system_helpers::run_program, + system_helpers::run_program_relative, + system_helpers::run_jar, + system_helpers::open_in_browser, + system_helpers::install_location, + system_helpers::is_elevated, + system_helpers::set_migoto_target, + system_helpers::wipe_registry, + proxy::set_proxy_addr, + proxy::generate_ca_files, + unzip::unzip, + file_helpers::rename, + file_helpers::dir_create, + file_helpers::dir_exists, + file_helpers::dir_is_empty, + file_helpers::dir_delete, + file_helpers::copy_file, + file_helpers::copy_file_with_new_name, + file_helpers::delete_file, + file_helpers::are_files_identical, + file_helpers::read_file, + file_helpers::write_file, + downloader::download_file, + downloader::stop_download, + lang::get_lang, + lang::get_languages, + web::valid_url, + web::web_get, + gamebanana::get_download_links, + gamebanana::list_submissions, + gamebanana::list_mods, + metadata_patcher::patch_metadata + ]) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); + } else { + try_flush(); + println!("Press enter or CTRL-C twice to quit..."); + std::io::stdin().read_line(&mut String::new()).unwrap(); + } + + // Always disconnect upon closing the program + disconnect(); } #[tauri::command] diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 578cb4b..6212420 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -7,7 +7,7 @@ }, "package": { "productName": "Cultivation", - "version": "1.0.7" + "version": "1.0.8" }, "tauri": { "allowlist": {