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
72 lines
1.7 KiB
Rust
72 lines
1.7 KiB
Rust
|
|
use std::env;
|
|
|
|
use oneclient_common::domain::ProviderId;
|
|
use oneclient_core::{dev, logger, LauncherResult};
|
|
|
|
#[tokio::main]
|
|
async fn main() -> LauncherResult<()> {
|
|
logger::init_debug()?;
|
|
|
|
let mut args = env::args().skip(1);
|
|
let provider_name = args.next().unwrap_or_else(|| "modrinth".into());
|
|
let project_ref = args.next().unwrap_or_else(|| "sodium".into());
|
|
let mc_version = args.next();
|
|
|
|
let provider_id = parse_provider(&provider_name)?;
|
|
let env = dev::ephemeral_services().await?.content();
|
|
let provider = env.providers.get(provider_id)?;
|
|
|
|
let project = provider.get_project(&project_ref, &env).await?;
|
|
|
|
println!(
|
|
"{:?} project: {} ({})",
|
|
project.provider, project.name, project.id
|
|
);
|
|
println!(" {}\n", project.summary);
|
|
|
|
let versions = provider
|
|
.list_versions(
|
|
&project.id,
|
|
mc_version.as_deref(),
|
|
None,
|
|
0,
|
|
5,
|
|
&env,
|
|
)
|
|
.await?;
|
|
|
|
println!("Versions (up to {}):", versions.items.len());
|
|
for v in &versions.items {
|
|
println!(
|
|
" {} - {} ({})",
|
|
v.name, v.version_number, v.version_id
|
|
);
|
|
}
|
|
|
|
if let Some(version) = versions.items.first() {
|
|
let detail = provider
|
|
.get_version(&project.id, &version.version_id, &env)
|
|
.await?;
|
|
if let Some(file) = detail.primary_file() {
|
|
println!(
|
|
"\nPrimary file: {} sha1={} cf_fp={:?}",
|
|
file.file_name, file.sha1, file.fingerprint
|
|
);
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn parse_provider(name: &str) -> LauncherResult<ProviderId> {
|
|
match name.to_lowercase().as_str() {
|
|
"modrinth" | "mr" => Ok(ProviderId::Modrinth),
|
|
"curseforge" | "cf" => Ok(ProviderId::CurseForge),
|
|
other => Err(oneclient_core::LauncherError::InvalidSettingsProfile {
|
|
reason: format!(
|
|
"unknown provider {other:?}; use modrinth or curseforge"
|
|
),
|
|
}),
|
|
}
|
|
}
|