diff options
| author | 2026-01-15 12:52:08 +0800 | |
|---|---|---|
| committer | 2026-01-15 12:52:08 +0800 | |
| commit | 3dd9b12033f4d2284601089201594a3e1049d7c2 (patch) | |
| tree | 22ace52c4a6e8d9d7fa6fb7a7423999970b6d2a9 /src-tauri/src/main.rs | |
| parent | d4d37b4d418ab2a517ce6ce2b8272cf084fdc724 (diff) | |
| parent | 43a3e9c285f3d5d04fef025041a06609a0d1c218 (diff) | |
| download | DropOut-3dd9b12033f4d2284601089201594a3e1049d7c2.tar.gz DropOut-3dd9b12033f4d2284601089201594a3e1049d7c2.zip | |
Merge pull request #13 from BegoniaHe/feat/download-java-rt
Diffstat (limited to 'src-tauri/src/main.rs')
| -rw-r--r-- | src-tauri/src/main.rs | 100 |
1 files changed, 98 insertions, 2 deletions
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 8a955a5..53589d8 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -2,6 +2,7 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] use std::process::Stdio; +use std::ptr::null; use std::sync::Mutex; use tauri::{Emitter, Manager, State, Window}; // Added Emitter use tokio::io::{AsyncBufReadExt, BufReader}; @@ -158,6 +159,7 @@ async fn start_game( url: client_jar.url.clone(), path: client_path.clone(), sha1: client_jar.sha1.clone(), + sha256: None, }); // --- Libraries --- @@ -182,6 +184,7 @@ async fn start_game( url: artifact.url.clone(), path: lib_path, sha1: artifact.sha1.clone(), + sha256: None, }); } @@ -215,6 +218,7 @@ async fn start_game( url: native_artifact.url, path: native_path.clone(), sha1: native_artifact.sha1, + sha256: None, }); native_libs_paths.push(native_path); @@ -233,6 +237,7 @@ async fn start_game( url, path: lib_path, sha1: None, // Maven libraries often don't have SHA1 in the JSON + sha256: None, }); } } @@ -312,6 +317,7 @@ async fn start_game( url, path, sha1: Some(hash), + sha256: None, }); } @@ -842,8 +848,8 @@ async fn refresh_account( /// Detect Java installations on the system #[tauri::command] -async fn detect_java() -> Result<Vec<core::java::JavaInstallation>, String> { - Ok(core::java::detect_java_installations()) +async fn detect_java(app_handle: tauri::AppHandle) -> Result<Vec<core::java::JavaInstallation>, String> { + Ok(core::java::detect_all_java_installations(&app_handle)) } /// Get recommended Java for a specific Minecraft version @@ -854,6 +860,80 @@ 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<core::java::JavaDownloadInfo, String> { + 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( + app_handle: tauri::AppHandle, + major_version: u32, + image_type: String, + custom_path: Option<String>, +) -> Result<core::java::JavaInstallation, String> { + 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(&app_handle, major_version, img_type, path).await +} + +/// Get available Adoptium Java versions +#[tauri::command] +async fn fetch_available_java_versions() -> Result<Vec<u32>, String> { + core::java::fetch_available_versions().await +} + +/// Fetch Java catalog with platform availability (uses cache) +#[tauri::command] +async fn fetch_java_catalog( + app_handle: tauri::AppHandle, +) -> Result<core::java::JavaCatalog, String> { + core::java::fetch_java_catalog(&app_handle, false).await +} + +/// Refresh Java catalog (bypass cache) +#[tauri::command] +async fn refresh_java_catalog( + app_handle: tauri::AppHandle, +) -> Result<core::java::JavaCatalog, String> { + core::java::fetch_java_catalog(&app_handle, true).await +} + +/// Cancel current Java download +#[tauri::command] +async fn cancel_java_download() -> Result<(), String> { + core::java::cancel_current_download(); + Ok(()) +} + +/// Get pending Java downloads +#[tauri::command] +async fn get_pending_java_downloads( + app_handle: tauri::AppHandle, +) -> Result<Vec<core::downloader::PendingJavaDownload>, String> { + Ok(core::java::get_pending_downloads(&app_handle)) +} + +/// Resume pending Java downloads +#[tauri::command] +async fn resume_java_downloads( + app_handle: tauri::AppHandle, +) -> Result<Vec<core::java::JavaInstallation>, String> { + core::java::resume_pending_downloads(&app_handle).await +} + /// Get Minecraft versions supported by Fabric #[tauri::command] async fn get_fabric_game_versions() -> Result<Vec<core::fabric::FabricGameVersion>, String> { @@ -1026,6 +1106,13 @@ fn main() { println!("[Startup] Loaded saved account"); } + // Check for pending Java downloads and notify frontend + let pending = core::java::get_pending_downloads(&app.app_handle()); + if !pending.is_empty() { + println!("[Startup] Found {} pending Java download(s)", pending.len()); + let _ = app.emit("pending-java-downloads", pending.len()); + } + Ok(()) }) .invoke_handler(tauri::generate_handler![ @@ -1039,8 +1126,17 @@ fn main() { start_microsoft_login, complete_microsoft_login, refresh_account, + // Java commands detect_java, get_recommended_java, + fetch_adoptium_java, + download_adoptium_java, + fetch_available_java_versions, + fetch_java_catalog, + refresh_java_catalog, + cancel_java_download, + get_pending_java_downloads, + resume_java_downloads, // Fabric commands get_fabric_game_versions, get_fabric_loader_versions, |