OneLauncher-Cracked/packages/oneclient_java/examples/install_provider.rs

66 lines
2.3 KiB
Rust

//! Downloads and probes one vendor's JDK then records it in an in-memory store
use std::env;
use oneclient_common::paths::java_dir;
use oneclient_events::EventBus;
use oneclient_java::vendors::{
AdoptiumRuntimeProvider, CorrettoRuntimeProvider, JavaRuntimeProvider, LibericaRuntimeProvider,
ZuluRuntimeProvider,
};
use oneclient_java::{JavaResult, JavaService, MemoryJavaStore, check_java_runtime};
use oneclient_net::{NetConfig, RequestClient};
#[tokio::main]
async fn main() -> JavaResult<()> {
let mut args = env::args().skip(1);
let vendor = args.next().unwrap_or_else(|| {
eprintln!("usage: install_provider <zulu|adoptium|corretto|liberica> [major]");
std::process::exit(1);
});
let major: u32 = args
.next()
.unwrap_or_else(|| "21".to_string())
.parse()
.expect("major version must be a number");
let net = RequestClient::new(NetConfig::default())?;
// Nothing drains this so events are dropped
let (events, _rx) = EventBus::channel();
let provider: Box<dyn JavaRuntimeProvider> = match vendor.as_str() {
"zulu" => Box::new(ZuluRuntimeProvider),
"adoptium" => Box::new(AdoptiumRuntimeProvider),
"corretto" => Box::new(CorrettoRuntimeProvider),
"liberica" => Box::new(LibericaRuntimeProvider),
other => {
eprintln!("unknown vendor '{other}', use zulu, adoptium, corretto, or liberica");
std::process::exit(1);
}
};
let packages = provider.list_packages(Some(major), &net).await?;
let package = packages
.into_iter()
.find(|p| p.java_version.contains(&major))
.unwrap_or_else(|| panic!("no {vendor} package for Java {major}"));
println!("Installing package {:#?} to '{:?}'", package, java_dir()?);
let executable = provider
.install_package(&package, &net, &events, None)
.await?;
println!("Installed: {}", executable.display());
let info = check_java_runtime(executable.display().to_string()).await?;
println!(" version: {}", info.version);
println!(" vendor: {}", info.vendor);
println!(" arch: {}", info.os_arch);
let service = JavaService::new(MemoryJavaStore::new(), net, events);
service.add_custom_runtime(executable).await?;
println!("Registered runtimes: {:?}", service.list_runtimes().await?);
Ok(())
}