Ability to set asset version for a single platform

This commit is contained in:
Ethan O'Brien
2026-06-06 19:05:46 -05:00
parent 29f56a18cb
commit d34b5fc6a4
2 changed files with 46 additions and 14 deletions

View File

@@ -59,6 +59,9 @@ pub struct Args {
#[arg(long, default_value = "", help = "Asset hash for JP Android client.")] #[arg(long, default_value = "", help = "Asset hash for JP Android client.")]
pub jp_android_asset_hash: String, pub jp_android_asset_hash: String,
#[arg(long, default_value = "", help = "Asset version for windows client.")]
pub windows_asset_version: String,
#[arg(long, default_value = "", help = "Asset hash for windows client.")] #[arg(long, default_value = "", help = "Asset hash for windows client.")]
pub windows_asset_hash: String, pub windows_asset_hash: String,

View File

@@ -13,7 +13,9 @@ use crate::database::gree;
use crate::runtime::get_easter_mode; use crate::runtime::get_easter_mode;
struct AssetHashes { struct AssetHashes {
version: &'static str, version_android: &'static str,
version_ios: &'static str,
version_windows: &'static str,
android: &'static str, android: &'static str,
ios: &'static str, ios: &'static str,
windows: &'static str, windows: &'static str,
@@ -21,13 +23,17 @@ struct AssetHashes {
static ASSET_TABLE: &[(&str, AssetHashes)] = &[ static ASSET_TABLE: &[(&str, AssetHashes)] = &[
("JP", AssetHashes { ("JP", AssetHashes {
version: "4c921d2443335e574a82e04ec9ea243c", version_android: "4c921d2443335e574a82e04ec9ea243c",
version_ios: "4c921d2443335e574a82e04ec9ea243c",
version_windows: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
android: "67f8f261c16b3cca63e520a25aad6c1c", android: "67f8f261c16b3cca63e520a25aad6c1c",
ios: "b8975be8300013a168d061d3fdcd4a16", ios: "b8975be8300013a168d061d3fdcd4a16",
windows: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", windows: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
}), }),
("GL", AssetHashes { ("GL", AssetHashes {
version: "5260ff15dff8ba0c00ad91400f515f55", version_android: "5260ff15dff8ba0c00ad91400f515f55",
version_ios: "5260ff15dff8ba0c00ad91400f515f55",
version_windows: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
android: "d210b28037885f3ef56b8f8aa45ac95b", android: "d210b28037885f3ef56b8f8aa45ac95b",
ios: "dd7175e4bcdab476f38c33c7f34b5e4d", ios: "dd7175e4bcdab476f38c33c7f34b5e4d",
windows: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", windows: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
@@ -55,6 +61,25 @@ impl AssetHashes {
base base
}.to_string()) }.to_string())
} }
fn version_for(&self, platform: &str, region: &str) -> Option<String> {
let args = crate::get_args();
let (base, override_version) = match (region, platform) {
("JP", "Android") => (self.version_android, ""),
("JP", "iOS") => (self.version_ios, ""),
("JP", "Windows") => (self.version_windows, args.windows_asset_version.as_str()),
("GL", "Android") => (self.version_android, ""),
("GL", "iOS") => (self.version_ios, ""),
("GL", "Windows") => (self.version_windows, ""),
_ => return None,
};
Some(if !override_version.is_empty() {
override_version
} else {
base
}.to_string())
}
} }
static EASTER_HASHES: &[(&str, &str)] = &[ static EASTER_HASHES: &[(&str, &str)] = &[
@@ -65,7 +90,11 @@ static EASTER_HASHES: &[(&str, &str)] = &[
pub fn get_player_region(asset_version: &str) -> Option<String> { pub fn get_player_region(asset_version: &str) -> Option<String> {
ASSET_TABLE ASSET_TABLE
.iter() .iter()
.find(|(_, h)| h.version == asset_version) .find(|(_, h)| {
h.version_android == asset_version ||
h.version_ios == asset_version ||
h.version_windows == asset_version
})
.map(|(region, _)| region.to_string()) .map(|(region, _)| region.to_string())
} }
@@ -85,7 +114,7 @@ pub fn get_asset_hash(asset_version: &str, platform: &str) -> Option<String> {
let (region, hashes) = ASSET_TABLE let (region, hashes) = ASSET_TABLE
.iter() .iter()
.find(|(_, h)| h.version == asset_version)?; .find(|(region, h)| h.version_for(platform, region).as_deref() == Some(asset_version))?;
let easter_hash = easter let easter_hash = easter
.then(|| EASTER_HASHES.iter().find(|(r, _)| r == region).map(|(_, h)| *h)) .then(|| EASTER_HASHES.iter().find(|(r, _)| r == region).map(|(_, h)| *h))