aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src-tauri/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src-tauri/src/main.rs')
-rw-r--r--src-tauri/src/main.rs100
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,