diff --git a/CHANGELOG.md b/CHANGELOG.md index d6cbd01..f54099d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- Fixed jadeite patch state handling from the metadata file +- Fixed game pre-downloading button sensitivity when the update was partially downloaded, but then interrupted +- Fixed game pre-downloading button visibility when jadeite patch state is not "verified" + ## [1.2.3] - 14.07.2023 ### Fixed diff --git a/Cargo.lock b/Cargo.lock index ba93519..7a5e6f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -39,8 +39,8 @@ dependencies = [ [[package]] name = "anime-game-core" -version = "1.13.2" -source = "git+https://github.com/an-anime-team/anime-game-core?tag=1.13.2#a15b8162adcefcc9d99eacbd55ae5cfe1e1fddfe" +version = "1.13.3" +source = "git+https://github.com/an-anime-team/anime-game-core?tag=1.13.3#8eeb77915ff0c3d68e6b168e1c7f31cc5cc41a02" dependencies = [ "anyhow", "bzip2", @@ -64,8 +64,8 @@ dependencies = [ [[package]] name = "anime-launcher-sdk" -version = "1.8.5" -source = "git+https://github.com/an-anime-team/anime-launcher-sdk?tag=1.8.5#cedb6f05b5749c3143a235a92ba78c458c4934a8" +version = "1.8.7" +source = "git+https://github.com/an-anime-team/anime-launcher-sdk?tag=1.8.7#8380edbbd9351911c4afb129786309b1274246f0" dependencies = [ "anime-game-core", "anyhow", @@ -82,9 +82,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" dependencies = [ "backtrace", ] @@ -230,7 +230,7 @@ checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -273,7 +273,7 @@ checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -681,7 +681,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -718,7 +718,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -739,7 +739,7 @@ checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -1010,7 +1010,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -1540,9 +1540,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jobserver" @@ -2001,7 +2001,7 @@ checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -2092,18 +2092,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.64" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.29" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0" dependencies = [ "proc-macro2", ] @@ -2239,7 +2239,7 @@ checksum = "848a6e1b4954b7aa8155d4a234516d46ed543a614666adc1ea73a922bc841e2a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -2352,9 +2352,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "same-file" @@ -2376,9 +2376,9 @@ dependencies = [ [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sct" @@ -2421,9 +2421,9 @@ checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af" [[package]] name = "semver" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" [[package]] name = "serde" @@ -2442,14 +2442,14 @@ checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] name = "serde_json" -version = "1.0.102" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5062a995d481b2308b6064e9af76011f2921c35f97b0468811ed9f6cd91dfed" +checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b" dependencies = [ "itoa", "ryu", @@ -2464,7 +2464,7 @@ checksum = "1d89a8107374290037607734c0b73a85db7ed80cae314b3c5791f192a496e731" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -2509,9 +2509,9 @@ dependencies = [ [[package]] name = "signal-hook" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" +checksum = "b824b6e687aff278cdbf3b36f07aa52d4bd4099699324d5da86a2ebce3aa00b3" dependencies = [ "libc", "signal-hook-registry", @@ -2629,9 +2629,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.25" +version = "2.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e3fc8c0c74267e2df136e5e5fb656a464158aa57624053375eb9c8c6e25ae2" +checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970" dependencies = [ "proc-macro2", "quote", @@ -2640,9 +2640,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.29.4" +version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "751e810399bba86e9326f5762b7f32ac5a085542df78da6a78d94e07d14d7c11" +checksum = "6b949f01f9c23823744b71e0060472ecbde578ef68cc2a9e46d114efd77c3034" dependencies = [ "cfg-if", "core-foundation-sys", @@ -2714,7 +2714,7 @@ checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -2789,7 +2789,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -2815,9 +2815,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.13" +version = "0.19.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f8751d9c1b03c6500c387e96f81f815a4f8e72d142d2d4a9ffa6fedd51ddee7" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" dependencies = [ "indexmap", "serde", @@ -2846,7 +2846,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -2960,9 +2960,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-normalization" @@ -3073,7 +3073,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", "wasm-bindgen-shared", ] @@ -3107,7 +3107,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", "wasm-bindgen-backend", "wasm-bindgen-shared", ] diff --git a/Cargo.toml b/Cargo.toml index 6fadf21..3cb7001 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,7 @@ glib-build-tools = "0.17" [dependencies.anime-launcher-sdk] git = "https://github.com/an-anime-team/anime-launcher-sdk" -tag = "1.8.5" +tag = "1.8.7" features = ["all", "star-rail", "star-rail-patch"] # path = "../anime-launcher-sdk" # ! for dev purposes only diff --git a/src/ui/about.rs b/src/ui/about.rs index b1b124a..cd6bd99 100644 --- a/src/ui/about.rs +++ b/src/ui/about.rs @@ -93,19 +93,9 @@ impl SimpleComponent for AboutDialog { "

Fixed

", "", - - "

Changed

", - - "", ].join("\n"), diff --git a/src/ui/main/mod.rs b/src/ui/main/mod.rs index d0db32e..47ec62f 100644 --- a/src/ui/main/mod.rs +++ b/src/ui/main/mod.rs @@ -301,12 +301,12 @@ impl SimpleComponent for App { #[watch] set_tooltip_text: Some(&tr_args("predownload-update", [ ("version", match model.state.as_ref() { - Some(LauncherState::PredownloadAvailable(game)) => game.latest().to_string(), + Some(LauncherState::PredownloadAvailable { diff, .. }) => diff.latest().to_string(), _ => String::from("?") }.into()), ("size", match model.state.as_ref() { - Some(LauncherState::PredownloadAvailable(game)) => prettify_bytes(game.downloaded_size().unwrap_or(0)), + Some(LauncherState::PredownloadAvailable { diff, .. }) => prettify_bytes(diff.downloaded_size().unwrap_or(0)), _ => String::from("?") }.into()) ])), @@ -316,11 +316,13 @@ impl SimpleComponent for App { #[watch] set_sensitive: match model.state.as_ref() { - Some(LauncherState::PredownloadAvailable(game)) => { + Some(LauncherState::PredownloadAvailable { diff, .. }) => { let config = Config::get().unwrap(); let temp = config.launcher.temp.unwrap_or_else(std::env::temp_dir); - !temp.join(game.file_name().unwrap()).exists() + !temp.join(diff.file_name().unwrap()).metadata() + .map(|metadata| Some(metadata.len()) == diff.downloaded_size()) + .unwrap_or(false) } _ => false @@ -328,11 +330,15 @@ impl SimpleComponent for App { #[watch] set_css_classes: match model.state.as_ref() { - Some(LauncherState::PredownloadAvailable(game)) => { + Some(LauncherState::PredownloadAvailable { diff, .. }) => { let config = Config::get().unwrap(); let temp = config.launcher.temp.unwrap_or_else(std::env::temp_dir); - if temp.join(game.file_name().unwrap()).exists() { + let downloaded = temp.join(diff.file_name().unwrap()).metadata() + .map(|metadata| Some(metadata.len()) == diff.downloaded_size()) + .unwrap_or(false); + + if downloaded { &["success", "circular"] } else { &["warning", "circular"] @@ -358,7 +364,9 @@ impl SimpleComponent for App { set_icon_name: match &model.state { Some(LauncherState::Launch) | Some(LauncherState::PatchNotVerified) | - Some(LauncherState::PredownloadAvailable { .. }) => "media-playback-start-symbolic", + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Verified, .. }) | + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Unverified, .. }) + => "media-playback-start-symbolic", Some(LauncherState::PatchNotInstalled) | Some(LauncherState::PatchUpdateAvailable) => "document-save-symbolic", @@ -374,6 +382,8 @@ impl SimpleComponent for App { Some(LauncherState::GameOutdated(_)) | Some(LauncherState::PatchBroken) | Some(LauncherState::PatchUnsafe) | + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Broken, .. }) | + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Unsafe, .. }) | None => "window-close-symbolic" }, @@ -381,13 +391,20 @@ impl SimpleComponent for App { set_label: &match &model.state { Some(LauncherState::Launch) | Some(LauncherState::PatchNotVerified) | - Some(LauncherState::PredownloadAvailable { .. }) => tr("launch"), + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Verified, .. }) | + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Unverified, .. }) + => tr("launch"), Some(LauncherState::PatchNotInstalled) | Some(LauncherState::PatchUpdateAvailable) => tr("download-patch"), - Some(LauncherState::PatchBroken) => tr("patch-broken"), - Some(LauncherState::PatchUnsafe) => tr("patch-unsafe"), + Some(LauncherState::PatchBroken) | + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Broken, .. }) + => tr("patch-broken"), + + Some(LauncherState::PatchUnsafe) | + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Unsafe, .. }) + => tr("patch-unsafe"), Some(LauncherState::TelemetryNotDisabled) => tr("disable-telemetry"), @@ -423,7 +440,9 @@ impl SimpleComponent for App { set_sensitive: !model.disabled_buttons && match &model.state { Some(LauncherState::GameOutdated { .. }) | Some(LauncherState::PatchBroken) | - Some(LauncherState::PatchUnsafe) => false, + Some(LauncherState::PatchUnsafe) | + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Broken, .. }) | + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Unsafe, .. }) => false, Some(_) => true, @@ -436,7 +455,9 @@ impl SimpleComponent for App { Some(LauncherState::PatchNotVerified) => &["warning", "pill"], Some(LauncherState::PatchBroken) | - Some(LauncherState::PatchUnsafe) => &["error", "pill"], + Some(LauncherState::PatchUnsafe) | + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Broken, .. }) | + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Unsafe, .. }) => &["error", "pill"], Some(_) => &["suggested-action", "pill"], @@ -448,8 +469,14 @@ impl SimpleComponent for App { Some(LauncherState::GameOutdated { .. }) => tr("main-window--version-outdated-tooltip"), Some(LauncherState::PatchNotVerified) => tr("patch-testing-tooltip"), - Some(LauncherState::PatchBroken) => tr("patch-broken-tooltip"), - Some(LauncherState::PatchUnsafe) => tr("patch-unsafe-tooltip"), + + Some(LauncherState::PatchBroken) | + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Broken, .. }) + => tr("patch-broken-tooltip"), + + Some(LauncherState::PatchUnsafe) | + Some(LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Unsafe, .. }) + => tr("patch-unsafe-tooltip"), _ => String::new() }), @@ -748,8 +775,8 @@ impl SimpleComponent for App { Ok(latest) => match jadeite::get_metadata() { Ok(metadata) => { let status = GAME.get_version() - .map(|version| metadata.hsr.global.get_status(version)) - .unwrap_or(metadata.hsr.global.status); + .map(|version| metadata.games.hsr.global.get_status(version)) + .unwrap_or(metadata.games.hsr.global.status); Some((latest.version, status)) } @@ -914,7 +941,7 @@ impl SimpleComponent for App { #[allow(unused_must_use)] AppMsg::PredownloadUpdate => { - if let Some(LauncherState::PredownloadAvailable(mut game)) = self.state.clone() { + if let Some(LauncherState::PredownloadAvailable { mut diff, .. }) = self.state.clone() { let tmp = Config::get().unwrap().launcher.temp.unwrap_or_else(std::env::temp_dir); self.downloading = true; @@ -924,7 +951,7 @@ impl SimpleComponent for App { progress_bar_input.send(ProgressBarMsg::UpdateCaption(Some(tr("downloading")))); std::thread::spawn(move || { - let result = game.download_to(&tmp, clone!(@strong progress_bar_input => move |curr, total| { + let result = diff.download_to(&tmp, clone!(@strong progress_bar_input => move |curr, total| { progress_bar_input.send(ProgressBarMsg::UpdateProgress(curr, total)); })); @@ -949,7 +976,8 @@ impl SimpleComponent for App { AppMsg::PerformAction => unsafe { match self.state.as_ref().unwrap_unchecked() { LauncherState::PatchNotVerified | - LauncherState::PredownloadAvailable { .. } | + LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Verified, .. } | + LauncherState::PredownloadAvailable { patch: JadeitePatchStatusVariant::Unverified, .. } | LauncherState::Launch => launch::launch(sender), LauncherState::PatchNotInstalled |