From f093d2a310627aa3ee5a2820339f8a18bd251e81 Mon Sep 17 00:00:00 2001 From: "Begonia, HE" <163421589+BegoniaHe@users.noreply.github.com> Date: Wed, 14 Jan 2026 05:12:31 +0100 Subject: feat(java): integrate Adoptium API for Java runtime download Add automatic Java (Temurin) download and installation feature: - Add Adoptium API v3 integration to fetch latest Java releases - Support JRE and JDK image types with version selection (8/11/17/21) - Implement platform detection for macOS, Linux, and Windows - Add SHA256 checksum verification for downloaded archives - Add tar.gz extraction support with Unix permission preservation - Handle macOS-specific Java path structure (Contents/Home/bin) - Add frontend UI with version selector and download progress - Register Tauri commands: fetch_adoptium_java, download_adoptium_java, fetch_available_java_versions Dependencies added: sha2, flate2, tar, dirs --- src-tauri/src/main.rs | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) (limited to 'src-tauri/src/main.rs') diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index d7ae9a4..4c3f689 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -117,6 +117,7 @@ async fn start_game( url: client_jar.url, path: client_path.clone(), sha1: Some(client_jar.sha1), + sha256: None, }); // --- Libraries --- @@ -141,6 +142,7 @@ async fn start_game( url: artifact.url.clone(), path: lib_path, sha1: Some(artifact.sha1.clone()), + sha256: None, }); } @@ -174,6 +176,7 @@ async fn start_game( url: native_artifact.url, path: native_path.clone(), sha1: Some(native_artifact.sha1), + sha256: None, }); native_libs_paths.push(native_path); @@ -253,6 +256,7 @@ async fn start_game( url, path, sha1: Some(hash), + sha256: None, }); } @@ -741,7 +745,7 @@ async fn refresh_account( /// Detect Java installations on the system #[tauri::command] async fn detect_java() -> Result, String> { - Ok(core::java::detect_java_installations()) + Ok(core::java::detect_all_java_installations()) } /// Get recommended Java for a specific Minecraft version @@ -752,6 +756,40 @@ async fn get_recommended_java( Ok(core::java::get_recommended_java(required_major_version)) } +/// Get Adoptium Java download info +#[tauri::command] +async fn fetch_adoptium_java( + major_version: u32, + image_type: String, +) -> Result { + let img_type = match image_type.to_lowercase().as_str() { + "jdk" => core::java::ImageType::Jdk, + _ => core::java::ImageType::Jre, + }; + core::java::fetch_java_release(major_version, img_type).await +} + +/// Download and install Adoptium Java +#[tauri::command] +async fn download_adoptium_java( + major_version: u32, + image_type: String, + custom_path: Option, +) -> Result { + let img_type = match image_type.to_lowercase().as_str() { + "jdk" => core::java::ImageType::Jdk, + _ => core::java::ImageType::Jre, + }; + let path = custom_path.map(std::path::PathBuf::from); + core::java::download_and_install_java(major_version, img_type, path).await +} + +/// Get available Adoptium Java versions +#[tauri::command] +async fn fetch_available_java_versions() -> Result, String> { + core::java::fetch_available_versions().await +} + fn main() { tauri::Builder::default() .plugin(tauri_plugin_shell::init()) @@ -793,7 +831,10 @@ fn main() { complete_microsoft_login, refresh_account, detect_java, - get_recommended_java + get_recommended_java, + fetch_adoptium_java, + download_adoptium_java, + fetch_available_java_versions ]) .run(tauri::generate_context!()) .expect("error while running tauri application"); -- cgit v1.2.3-70-g09d2