From 67cfc4eb83f16e82901b0225d8bd5d84ab9e737e Mon Sep 17 00:00:00 2001 From: Julian Chang Date: Thu, 1 Oct 2026 01:34:40 -0400 Subject: [PATCH] fix: key cached version info by loader format version Bump interfrost to 1.5.0 and pass the cluster's loader to download_version_info so a format bump doesn't reuse stale version JSON. --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- .../oneclient_app/src/hooks/queries/versions.rs | 7 ++++++- packages/oneclient_core/src/clusters/prepare.rs | 3 +++ packages/oneclient_core/src/game/launch.rs | 1 + packages/oneclient_core/src/verify.rs | 1 + packages/oneclient_mc/src/install.rs | 17 ++++++++++++++++- 7 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4fe02c2d..0ca01562 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3619,9 +3619,9 @@ dependencies = [ [[package]] name = "interfrost" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a14453cd2d9454beb9b410dc7b845b2d62ff67a6f42460bce6b9bc6e34d3b9" +checksum = "51cf4ffa08d3e23d9f6328cf64f521f7f50fb9ada957d0292e1738c40b699686" dependencies = [ "chrono", "serde", diff --git a/Cargo.toml b/Cargo.toml index e78fc241..9caa01a6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,7 @@ polyio = {path = "./packages/polyio"} # core (extra) discord-rich-presence = {version = "=1.1.0"} -interfrost = {version = "=1.4.0"} +interfrost = {version = "=1.5.0"} # logging sentry = {version = "=0.49.3", default-features = false, features = [ diff --git a/packages/oneclient_app/src/hooks/queries/versions.rs b/packages/oneclient_app/src/hooks/queries/versions.rs index b714eedd..88c04a91 100644 --- a/packages/oneclient_app/src/hooks/queries/versions.rs +++ b/packages/oneclient_app/src/hooks/queries/versions.rs @@ -258,7 +258,12 @@ impl QueryCapability for JavaMajorsQuery { let mc = mc.clone(); async move { let info = oneclient_core::game::download_version_info( - &mc, None, &version, None, false, + &mc, + None, + &version, + oneclient_common::domain::GameLoader::Vanilla, + None, + false, ) .await .ok()?; diff --git a/packages/oneclient_core/src/clusters/prepare.rs b/packages/oneclient_core/src/clusters/prepare.rs index 8efe18c5..8bbff246 100644 --- a/packages/oneclient_core/src/clusters/prepare.rs +++ b/packages/oneclient_core/src/clusters/prepare.rs @@ -188,6 +188,7 @@ pub async fn required_java_major( &state.services.mc(), None, &version, + cluster.mc_loader, loader_version.as_ref(), false, ) @@ -222,6 +223,7 @@ pub async fn estimate_cluster_download( &state.services.mc(), None, &version, + cluster.mc_loader, loader_version.as_ref(), false, ) @@ -279,6 +281,7 @@ async fn install_cluster( &state.services.mc(), Some(progress), &version, + cluster.mc_loader, loader_version.as_ref(), force, ) diff --git a/packages/oneclient_core/src/game/launch.rs b/packages/oneclient_core/src/game/launch.rs index e9e90056..ca2dec8d 100644 --- a/packages/oneclient_core/src/game/launch.rs +++ b/packages/oneclient_core/src/game/launch.rs @@ -186,6 +186,7 @@ async fn start( &state.services.mc(), Some(&progress), &version, + cluster.mc_loader, loader_version.as_ref(), false, ) diff --git a/packages/oneclient_core/src/verify.rs b/packages/oneclient_core/src/verify.rs index 0f9fc53b..fd3ef9de 100644 --- a/packages/oneclient_core/src/verify.rs +++ b/packages/oneclient_core/src/verify.rs @@ -123,6 +123,7 @@ async fn run_verify( &state.services.mc(), Some(progress), &version, + cluster.mc_loader, loader_version.as_ref(), false, ) diff --git a/packages/oneclient_mc/src/install.rs b/packages/oneclient_mc/src/install.rs index 0c3c89d3..9540631d 100644 --- a/packages/oneclient_mc/src/install.rs +++ b/packages/oneclient_mc/src/install.rs @@ -705,6 +705,7 @@ pub async fn download_version_info( ctx: &McCtx, progress: Option<&GroupedProgressSession>, version: &Version, + game_loader: GameLoader, loader: Option<&LoaderVersion>, force: bool, ) -> McResult { @@ -714,7 +715,7 @@ pub async fn download_version_info( let path = paths::versions_dir()? .join(&version_id) - .join(format!("{version_id}.json")); + .join(version_info_file_name(&version_id, game_loader.get_format_version())); if path.exists() && !force { match polyio::read_json::(&path).await { @@ -1540,10 +1541,24 @@ pub fn is_version_updated(version_index: usize, versions: &[Version]) -> bool { version_index <= versions.iter().position(|x| x.id == "22w16a").unwrap_or(0) } +fn version_info_file_name(version_id: &str, format_version: usize) -> String { + if format_version == 0 { + format!("{version_id}.json") + } else { + format!("{version_id}.v{format_version}.json") + } +} + #[cfg(test)] mod tests { use super::*; + #[test] + fn a_format_bump_moves_the_cached_version_info() { + assert_eq!(version_info_file_name("1.8.9", 0), "1.8.9.json"); + assert_eq!(version_info_file_name("1.8.9-0.19.5", 1), "1.8.9-0.19.5.v1.json"); + } + fn scratch(tag: &str) -> PathBuf { let dir = std::env::temp_dir().join(format!("oneclient-install-{tag}-{}", uuid::Uuid::new_v4()));