aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src-tauri/src/core/java/provider.rs
diff options
context:
space:
mode:
authorBegonia, HE <163421589+BegoniaHe@users.noreply.github.com>2026-01-27 03:56:21 +0100
committerBegonia, HE <163421589+BegoniaHe@users.noreply.github.com>2026-01-29 03:02:44 +0100
commitf4078c987a3899d4031acb49d72aa418432e046d (patch)
tree7f0c28c1e37428faa8726bab6cc4b843813fc420 /src-tauri/src/core/java/provider.rs
parent6bb967f05b2dd32dc1cd1b849a6089bc80667aec (diff)
downloadDropOut-f4078c987a3899d4031acb49d72aa418432e046d.tar.gz
DropOut-f4078c987a3899d4031acb49d72aa418432e046d.zip
feat(java): Enhance Java detection and error handling
- Added support for detecting Java installations from SDKMAN! in `find_sdkman_java`. - Improved `run_which_command_with_timeout` to handle command timeouts gracefully. - Introduced a unified `JavaError` enum for consistent error handling across Java operations. - Updated functions to return `Result` types instead of `Option` for better error reporting. - Enhanced `load_cached_catalog` and `save_catalog_cache` to use `JavaError`. - Refactored `fetch_java_catalog`, `fetch_java_release`, and `fetch_available_versions` to return `JavaError`. - Improved validation functions to return detailed errors when checking Java installations. - Added tests for version parsing and compatibility checks. - Updated `resolve_java_for_launch` to handle instance-specific and global Java paths.
Diffstat (limited to 'src-tauri/src/core/java/provider.rs')
-rw-r--r--src-tauri/src/core/java/provider.rs32
1 files changed, 28 insertions, 4 deletions
diff --git a/src-tauri/src/core/java/provider.rs b/src-tauri/src/core/java/provider.rs
index 1b79681..8aa0a0d 100644
--- a/src-tauri/src/core/java/provider.rs
+++ b/src-tauri/src/core/java/provider.rs
@@ -1,23 +1,47 @@
-use crate::core::java::{ImageType, JavaCatalog, JavaDownloadInfo};
+use crate::core::java::{ImageType, JavaCatalog, JavaDownloadInfo, JavaError};
use tauri::AppHandle;
+/// Trait for Java distribution providers (e.g., Adoptium, Corretto)
+///
+/// Implementations handle fetching Java catalogs and release information
+/// from different distribution providers.
pub trait JavaProvider: Send + Sync {
/// Fetch the Java catalog (all available versions for this provider)
+ ///
+ /// # Arguments
+ /// * `app_handle` - The Tauri app handle for cache access
+ /// * `force_refresh` - If true, bypass cache and fetch fresh data
+ ///
+ /// # Returns
+ /// * `Ok(JavaCatalog)` with available versions
+ /// * `Err(JavaError)` if fetch or parsing fails
async fn fetch_catalog(
&self,
app_handle: &AppHandle,
force_refresh: bool,
- ) -> Result<JavaCatalog, String>;
+ ) -> Result<JavaCatalog, JavaError>;
/// Fetch a specific Java release
+ ///
+ /// # Arguments
+ /// * `major_version` - The major version number (e.g., 17, 21)
+ /// * `image_type` - Whether to fetch JRE or JDK
+ ///
+ /// # Returns
+ /// * `Ok(JavaDownloadInfo)` with download details
+ /// * `Err(JavaError)` if fetch or parsing fails
async fn fetch_release(
&self,
major_version: u32,
image_type: ImageType,
- ) -> Result<JavaDownloadInfo, String>;
+ ) -> Result<JavaDownloadInfo, JavaError>;
/// Get list of available major versions
- async fn available_versions(&self) -> Result<Vec<u32>, String>;
+ ///
+ /// # Returns
+ /// * `Ok(Vec<u32>)` with available major versions
+ /// * `Err(JavaError)` if fetch fails
+ async fn available_versions(&self) -> Result<Vec<u32>, JavaError>;
/// Get provider name (e.g., "adoptium", "corretto")
#[allow(dead_code)]