From 3e8946c2e2690a44db64066e15b34e0d1637bb79 Mon Sep 17 00:00:00 2001 From: Observer KRypt0n_ Date: Sat, 29 Jul 2023 18:22:29 +0200 Subject: [PATCH] feat: added `launcher.auto_close` config --- src/config/schema_blanks/gamescope/mod.rs | 3 ++- src/games/genshin/config/schema/launcher/mod.rs | 13 +++++++++++-- src/games/genshin/game.rs | 4 ++++ src/games/honkai/config/schema/launcher/mod.rs | 13 +++++++++++-- src/games/honkai/game.rs | 4 ++++ src/games/pgr/config/schema/launcher/mod.rs | 13 +++++++++++-- src/games/pgr/game.rs | 4 ++++ src/games/star_rail/config/schema/launcher/mod.rs | 13 +++++++++++-- src/games/star_rail/game.rs | 4 ++++ 9 files changed, 62 insertions(+), 9 deletions(-) diff --git a/src/config/schema_blanks/gamescope/mod.rs b/src/config/schema_blanks/gamescope/mod.rs index 15160bc..f673974 100644 --- a/src/config/schema_blanks/gamescope/mod.rs +++ b/src/config/schema_blanks/gamescope/mod.rs @@ -93,6 +93,7 @@ impl From<&JsonValue> for Gamescope { } impl Gamescope { + // TODO: temporary workaround for transition period, will be removed in future fn is_legacy_version() -> bool { // gamescope doesn't have --version, so parsing --help instead Command::new("gamescope").arg("--help").output() @@ -148,7 +149,7 @@ impl Gamescope { gamescope += if Gamescope::is_legacy_version() { " -n" } else { - " -F integer" + " -S integer" } } diff --git a/src/games/genshin/config/schema/launcher/mod.rs b/src/games/genshin/config/schema/launcher/mod.rs index d18c39c..37be485 100644 --- a/src/games/genshin/config/schema/launcher/mod.rs +++ b/src/games/genshin/config/schema/launcher/mod.rs @@ -53,7 +53,9 @@ pub struct Launcher { pub discord_rpc: DiscordRpc, #[cfg(feature = "environment-emulation")] - pub environment: Environment + pub environment: Environment, + + pub auto_close: bool } impl Default for Launcher { @@ -70,7 +72,9 @@ impl Default for Launcher { discord_rpc: DiscordRpc::default(), #[cfg(feature = "environment-emulation")] - environment: Environment::default() + environment: Environment::default(), + + auto_close: false } } } @@ -124,6 +128,11 @@ impl From<&JsonValue> for Launcher { environment: match value.get("environment") { Some(value) => serde_json::from_value(value.clone()).unwrap_or(default.environment), None => default.environment + }, + + auto_close: match value.get("auto_close") { + Some(value) => value.as_bool().unwrap_or(default.auto_close), + None => default.auto_close } } } diff --git a/src/games/genshin/game.rs b/src/games/genshin/game.rs index bf051b2..f232f12 100644 --- a/src/games/genshin/game.rs +++ b/src/games/genshin/game.rs @@ -324,5 +324,9 @@ pub fn run() -> anyhow::Result<()> { Sessions::update(current, config.get_wine_prefix_path())?; } + if config.launcher.auto_close { + std::process::exit(0); + } + Ok(()) } diff --git a/src/games/honkai/config/schema/launcher/mod.rs b/src/games/honkai/config/schema/launcher/mod.rs index 0dce47e..c0781f2 100644 --- a/src/games/honkai/config/schema/launcher/mod.rs +++ b/src/games/honkai/config/schema/launcher/mod.rs @@ -41,7 +41,9 @@ pub struct Launcher { pub repairer: Repairer, #[cfg(feature = "discord-rpc")] - pub discord_rpc: DiscordRpc + pub discord_rpc: DiscordRpc, + + pub auto_close: bool } impl Default for Launcher { @@ -54,7 +56,9 @@ impl Default for Launcher { repairer: Repairer::default(), #[cfg(feature = "discord-rpc")] - discord_rpc: DiscordRpc::default() + discord_rpc: DiscordRpc::default(), + + auto_close: false } } } @@ -98,6 +102,11 @@ impl From<&JsonValue> for Launcher { Some(value) => DiscordRpc::from(value), None => default.discord_rpc }, + + auto_close: match value.get("auto_close") { + Some(value) => value.as_bool().unwrap_or(default.auto_close), + None => default.auto_close + } } } } diff --git a/src/games/honkai/game.rs b/src/games/honkai/game.rs index 79f60c8..2a766ac 100644 --- a/src/games/honkai/game.rs +++ b/src/games/honkai/game.rs @@ -257,5 +257,9 @@ pub fn run() -> anyhow::Result<()> { Sessions::update(current, config.get_wine_prefix_path())?; } + if config.launcher.auto_close { + std::process::exit(0); + } + Ok(()) } diff --git a/src/games/pgr/config/schema/launcher/mod.rs b/src/games/pgr/config/schema/launcher/mod.rs index 1c35c92..43d6598 100644 --- a/src/games/pgr/config/schema/launcher/mod.rs +++ b/src/games/pgr/config/schema/launcher/mod.rs @@ -41,7 +41,9 @@ pub struct Launcher { pub repairer: Repairer, #[cfg(feature = "discord-rpc")] - pub discord_rpc: DiscordRpc + pub discord_rpc: DiscordRpc, + + pub auto_close: bool } impl Default for Launcher { @@ -54,7 +56,9 @@ impl Default for Launcher { repairer: Repairer::default(), #[cfg(feature = "discord-rpc")] - discord_rpc: DiscordRpc::default() + discord_rpc: DiscordRpc::default(), + + auto_close: false } } } @@ -98,6 +102,11 @@ impl From<&JsonValue> for Launcher { Some(value) => DiscordRpc::from(value), None => default.discord_rpc }, + + auto_close: match value.get("auto_close") { + Some(value) => value.as_bool().unwrap_or(default.auto_close), + None => default.auto_close + } } } } diff --git a/src/games/pgr/game.rs b/src/games/pgr/game.rs index bc81e29..285e3d5 100644 --- a/src/games/pgr/game.rs +++ b/src/games/pgr/game.rs @@ -243,5 +243,9 @@ pub fn run() -> anyhow::Result<()> { Sessions::update(current, config.get_wine_prefix_path())?; } + if config.launcher.auto_close { + std::process::exit(0); + } + Ok(()) } diff --git a/src/games/star_rail/config/schema/launcher/mod.rs b/src/games/star_rail/config/schema/launcher/mod.rs index 841039e..ae30178 100644 --- a/src/games/star_rail/config/schema/launcher/mod.rs +++ b/src/games/star_rail/config/schema/launcher/mod.rs @@ -44,7 +44,9 @@ pub struct Launcher { pub repairer: Repairer, #[cfg(feature = "discord-rpc")] - pub discord_rpc: DiscordRpc + pub discord_rpc: DiscordRpc, + + pub auto_close: bool } impl Default for Launcher { @@ -58,7 +60,9 @@ impl Default for Launcher { repairer: Repairer::default(), #[cfg(feature = "discord-rpc")] - discord_rpc: DiscordRpc::default() + discord_rpc: DiscordRpc::default(), + + auto_close: false } } } @@ -106,6 +110,11 @@ impl From<&JsonValue> for Launcher { discord_rpc: match value.get("discord_rpc") { Some(value) => DiscordRpc::from(value), None => default.discord_rpc + }, + + auto_close: match value.get("auto_close") { + Some(value) => value.as_bool().unwrap_or(default.auto_close), + None => default.auto_close } } } diff --git a/src/games/star_rail/game.rs b/src/games/star_rail/game.rs index 4021edc..acb6e7b 100644 --- a/src/games/star_rail/game.rs +++ b/src/games/star_rail/game.rs @@ -258,5 +258,9 @@ pub fn run() -> anyhow::Result<()> { Sessions::update(current, config.get_wine_prefix_path())?; } + if config.launcher.auto_close { + std::process::exit(0); + } + Ok(()) }