diff options
| author | 2026-01-27 03:56:21 +0100 | |
|---|---|---|
| committer | 2026-01-29 03:02:44 +0100 | |
| commit | f4078c987a3899d4031acb49d72aa418432e046d (patch) | |
| tree | 7f0c28c1e37428faa8726bab6cc4b843813fc420 /src-tauri/src/core/java/provider.rs | |
| parent | 6bb967f05b2dd32dc1cd1b849a6089bc80667aec (diff) | |
| download | DropOut-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.rs | 32 |
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)] |