diff --git a/Cargo.toml b/Cargo.toml index a85663d..7013295 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "anime-launcher-sdk" -version = "1.0.2" +version = "1.0.3" authors = ["Nikita Podvirnyy "] license = "GPL-3.0" readme = "README.md" @@ -8,7 +8,7 @@ edition = "2021" [dependencies.anime-game-core] git = "https://github.com/an-anime-team/anime-game-core" -tag = "1.7.0" +tag = "1.7.1" features = ["all"] # path = "../anime-game-core" # ! for dev purposes only diff --git a/src/honkai/config/schema/patch.rs b/src/honkai/config/schema/patch.rs index 410e142..d472b38 100644 --- a/src/honkai/config/schema/patch.rs +++ b/src/honkai/config/schema/patch.rs @@ -9,6 +9,7 @@ use crate::honkai::consts::launcher_dir; pub struct Patch { pub path: PathBuf, pub servers: Vec, + pub apply_mfplat: bool, pub root: bool } @@ -24,6 +25,8 @@ impl Default for Patch { String::from("https://notabug.org/mkrsym1/dusk") ], + apply_mfplat: true, + // Disable root requirement for patching if we're running launcher in flatpak root: !PathBuf::from("/.flatpak-info").exists() } @@ -61,6 +64,11 @@ impl From<&JsonValue> for Patch { None => default.servers }, + apply_mfplat: match value.get("apply_mfplat") { + Some(value) => value.as_bool().unwrap_or(default.apply_mfplat), + None => default.apply_mfplat + }, + root: match value.get("root") { Some(value) => value.as_bool().unwrap_or(default.root), None => default.root diff --git a/src/honkai/game.rs b/src/honkai/game.rs index 4385b8f..4d70715 100644 --- a/src/honkai/game.rs +++ b/src/honkai/game.rs @@ -71,8 +71,6 @@ pub fn run() -> anyhow::Result<()> { bash_command += "gamemoderun "; } - let wine_build = config.game.wine.builds.join(&wine.name); - let run_command = features.command .map(|command| replace_keywords(command, &folders)) .unwrap_or(folders.wine.join(wine.files.wine64.unwrap_or(wine.files.wine)).to_string_lossy().to_string()); diff --git a/src/honkai/states.rs b/src/honkai/states.rs index ff2748a..9b5f0fc 100644 --- a/src/honkai/states.rs +++ b/src/honkai/states.rs @@ -16,7 +16,8 @@ pub enum LauncherState { /// Always contains `VersionDiff::Predownload` PredownloadAvailable(VersionDiff), - PatchAvailable(MainPatch), + MfplatPatchAvailable, + MainPatchAvailable(MainPatch), #[cfg(feature = "components")] WineNotInstalled, @@ -47,6 +48,7 @@ pub struct LauncherStateParams { pub patch_servers: Vec, pub patch_folder: PathBuf, + pub apply_mfplat: bool, pub status_updater: F } @@ -72,6 +74,11 @@ impl LauncherState { // Check game patch status (params.status_updater)(StateUpdating::Patch); + // Check if mfplat patch is needed + if params.apply_mfplat && !MfplatPatch::is_applied(¶ms.wine_prefix)? { + return Ok(Self::MfplatPatchAvailable); + } + let patch = Patch::new(¶ms.patch_folder); // Sync local patch folder with remote if needed @@ -88,7 +95,7 @@ impl LauncherState { let player_patch = patch.main_patch()?; if !player_patch.is_applied(¶ms.game_path)? { - return Ok(Self::PatchAvailable(player_patch)); + return Ok(Self::MainPatchAvailable(player_patch)); } // Check if update predownload available @@ -151,6 +158,7 @@ impl LauncherState { patch_servers: config.patch.servers, patch_folder: config.patch.path, + apply_mfplat: config.patch.apply_mfplat, status_updater })