Some checks are pending
Release Multiplatform Binaries / build (deb,appimage, linux-x86_64, ubuntu-22.04, x86_64-unknown-linux-gnu) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-arm64, macos-14, aarch64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-x86_64, macos-14, x86_64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (nsis, windows-x86_64, windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Release Multiplatform Binaries / create-release (push) Blocked by required conditions
- Rebased onto official Polyfrost OneLauncher v2.3.1 (commit 0e49c691)
- Preserved 100% offline authentication without requiring Microsoft accounts
- Integrated custom 3D offline skin changer with UUID character slot targeting
- Maintained CustomSkinLoader auto-configuration for Ely.by and SkinRestorer
- Maintained direct GitHub Releases auto-updater pointing to oiupoyt/OneLauncher-Cracked
- Maintained mods filter popover fix eliminating text ghosting/duplication
- Configured dev profile to prevent debug symbol bloat
81 lines
2.6 KiB
Rust
81 lines
2.6 KiB
Rust
use freya::query::{Query, QueryCapability, QueryStateData, UseQuery, use_query};
|
|
use oneclient_common::domain::GameLoader;
|
|
use oneclient_core::{LauncherError, VersionMetadata};
|
|
|
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
|
pub struct VersionsMetadataQuery;
|
|
|
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
|
pub struct VersionsMetadataKeys;
|
|
|
|
impl QueryCapability for VersionsMetadataQuery {
|
|
type Ok = Vec<VersionMetadata>;
|
|
type Err = LauncherError;
|
|
type Keys = VersionsMetadataKeys;
|
|
|
|
async fn run(&self, _keys: &Self::Keys) -> Result<Self::Ok, Self::Err> {
|
|
let state = crate::launcher::state()?;
|
|
let metadata = state.versions.metadata(&state.services.requester.config().meta_url_base).await;
|
|
if !metadata.is_empty() {
|
|
return Ok(metadata);
|
|
}
|
|
state.versions.sync(&state.services).await?;
|
|
Ok(state.versions.metadata(&state.services.requester.config().meta_url_base).await)
|
|
}
|
|
}
|
|
|
|
pub fn use_versions() -> UseQuery<VersionsMetadataQuery> {
|
|
use_query(Query::new(VersionsMetadataKeys, VersionsMetadataQuery))
|
|
}
|
|
|
|
/// A failed fetch reads as an empty list rather than `None` so callers that
|
|
/// block on this don't wait forever when the network is down
|
|
pub fn versions_metadata(query: &UseQuery<VersionsMetadataQuery>) -> Option<Vec<VersionMetadata>> {
|
|
let reader = query.read();
|
|
let state = reader.state();
|
|
match &*state {
|
|
QueryStateData::Settled { res: Err(_), .. } => Some(Vec::new()),
|
|
other => other.ok().cloned(),
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
|
pub struct LoaderVersionsQuery;
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
|
pub struct LoaderVersionsKeys {
|
|
pub mc_version: String,
|
|
pub loader: GameLoader,
|
|
}
|
|
|
|
impl QueryCapability for LoaderVersionsQuery {
|
|
type Ok = Vec<String>;
|
|
type Err = LauncherError;
|
|
type Keys = LoaderVersionsKeys;
|
|
|
|
async fn run(&self, keys: &Self::Keys) -> Result<Self::Ok, Self::Err> {
|
|
let state = crate::launcher::state()?;
|
|
let mut metadata = state.metadata.lock().await;
|
|
Ok(oneclient_core::get_loader_versions(
|
|
&mut metadata,
|
|
&state.services.mc(),
|
|
&keys.mc_version,
|
|
keys.loader,
|
|
)
|
|
.await?)
|
|
}
|
|
}
|
|
|
|
pub fn use_loader_versions(
|
|
mc_version: String,
|
|
loader: GameLoader,
|
|
) -> UseQuery<LoaderVersionsQuery> {
|
|
use_query(Query::new(
|
|
LoaderVersionsKeys { mc_version, loader },
|
|
LoaderVersionsQuery,
|
|
))
|
|
}
|
|
|
|
pub fn loader_versions(query: &UseQuery<LoaderVersionsQuery>) -> Vec<String> {
|
|
super::state::settled_or_loading(query).unwrap_or_default()
|
|
}
|