OneLauncher-Cracked/packages/oneclient_app/src/hooks/queries/version_metadata.rs
Julian Chang 29d1f1c9d2
Bugs
Fixed #492
Fixed #510
Fixed #506
Fixed #568
Fixed #582
Fixed #578
Fixed #567
Fixed #588
Fixed #585
Fixed #571
Fixed #587
Fixed #584
2026-07-15 13:41:43 -04:00

56 lines
1.5 KiB
Rust

use freya::query::QueryStateData;
use oneclient_core::VersionMetadata;
use oneclient_core::packages::domain::GameLoader;
use super::use_versions;
pub fn pick_version_metadata(
list: &[VersionMetadata],
major: u32,
minor: Option<u32>,
loader: Option<GameLoader>,
) -> Option<VersionMetadata> {
let loader_matches = |m: &VersionMetadata| match (&m.loader, loader) {
(Some(s), Some(l)) => l.to_string().eq_ignore_ascii_case(s),
_ => false,
};
if let Some(minor) = minor {
if let Some(hit) = list.iter().find(|m| {
m.major_version == major && m.minor_version == Some(minor) && loader_matches(m)
}) {
return Some(hit.clone());
}
if let Some(hit) = list
.iter()
.find(|m| m.major_version == major && m.minor_version == Some(minor))
{
return Some(hit.clone());
}
}
list.iter()
.find(|m| m.major_version == major && m.minor_version.is_none())
.cloned()
}
pub fn use_version_metadata(
major: Option<u32>,
minor: Option<u32>,
loader: Option<GameLoader>,
) -> Option<VersionMetadata> {
let versions_query = use_versions();
let major = major?;
let reader = versions_query.read();
let state = reader.state();
let list = match &*state {
QueryStateData::Settled { res: Ok(list), .. } => list,
QueryStateData::Loading {
res: Some(Ok(list)),
} => list,
_ => return None,
};
pick_version_metadata(list, major, minor, loader)
}