diff options
| author | 2026-01-29 02:34:16 +0100 | |
|---|---|---|
| committer | 2026-01-29 03:05:11 +0100 | |
| commit | c46d6c51b8bec6a52ca66087ef9b8edc48d809a3 (patch) | |
| tree | d4b3c1571ff409b1b0dd38d4670a55efe2327fe9 /src-tauri/src/core/java/persistence.rs | |
| parent | 68a493ef22cb0558a05dd3881c7d8cb4999d9679 (diff) | |
| download | DropOut-c46d6c51b8bec6a52ca66087ef9b8edc48d809a3.tar.gz DropOut-c46d6c51b8bec6a52ca66087ef9b8edc48d809a3.zip | |
refactor(java): improve error handling and logging
- Extract JavaError to dedicated error.rs module
- Add serde defaults for JavaInstallation optional fields
- Replace unwrap() with proper error propagation
- Add detailed logging for Java resolution priority chain
- Improve error mapping in validation (NotFound vs VerificationFailed)
Reviewed-by: Claude Sonnet 4.5
Diffstat (limited to 'src-tauri/src/core/java/persistence.rs')
| -rw-r--r-- | src-tauri/src/core/java/persistence.rs | 54 |
1 files changed, 38 insertions, 16 deletions
diff --git a/src-tauri/src/core/java/persistence.rs b/src-tauri/src/core/java/persistence.rs index d1e999e..fd81394 100644 --- a/src-tauri/src/core/java/persistence.rs +++ b/src-tauri/src/core/java/persistence.rs @@ -2,6 +2,8 @@ use serde::{Deserialize, Serialize}; use std::path::PathBuf; use tauri::{AppHandle, Manager}; +use super::error::JavaError; + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct JavaConfig { pub user_defined_paths: Vec<String>, @@ -34,26 +36,43 @@ pub fn load_java_config(app_handle: &AppHandle) -> JavaConfig { } match std::fs::read_to_string(&config_path) { - Ok(content) => serde_json::from_str(&content).unwrap_or_default(), - Err(_) => JavaConfig::default(), + Ok(content) => match serde_json::from_str(&content) { + Ok(config) => config, + Err(err) => { + // Log the error but don't panic - return default config + log::warn!( + "Failed to parse Java config at {}: {}. Using default configuration.", + config_path.display(), + err + ); + JavaConfig::default() + } + }, + Err(err) => { + log::warn!( + "Failed to read Java config at {}: {}. Using default configuration.", + config_path.display(), + err + ); + JavaConfig::default() + } } } -pub fn save_java_config(app_handle: &AppHandle, config: &JavaConfig) -> Result<(), String> { +pub fn save_java_config(app_handle: &AppHandle, config: &JavaConfig) -> Result<(), JavaError> { let config_path = get_java_config_path(app_handle); - let content = serde_json::to_string_pretty(config).map_err(|e| e.to_string())?; - std::fs::create_dir_all( - config_path - .parent() - .expect("Java config path should have a parent directory"), - ) - .map_err(|e| e.to_string())?; - std::fs::write(&config_path, content).map_err(|e| e.to_string())?; + let content = serde_json::to_string_pretty(config)?; + + std::fs::create_dir_all(config_path.parent().ok_or_else(|| { + JavaError::InvalidConfig("Java config path has no parent directory".to_string()) + })?)?; + + std::fs::write(&config_path, content)?; Ok(()) } #[allow(dead_code)] -pub fn add_user_defined_path(app_handle: &AppHandle, path: String) -> Result<(), String> { +pub fn add_user_defined_path(app_handle: &AppHandle, path: String) -> Result<(), JavaError> { let mut config = load_java_config(app_handle); if !config.user_defined_paths.contains(&path) { config.user_defined_paths.push(path); @@ -62,14 +81,17 @@ pub fn add_user_defined_path(app_handle: &AppHandle, path: String) -> Result<(), } #[allow(dead_code)] -pub fn remove_user_defined_path(app_handle: &AppHandle, path: &str) -> Result<(), String> { +pub fn remove_user_defined_path(app_handle: &AppHandle, path: &str) -> Result<(), JavaError> { let mut config = load_java_config(app_handle); config.user_defined_paths.retain(|p| p != path); save_java_config(app_handle, &config) } #[allow(dead_code)] -pub fn set_preferred_java_path(app_handle: &AppHandle, path: Option<String>) -> Result<(), String> { +pub fn set_preferred_java_path( + app_handle: &AppHandle, + path: Option<String>, +) -> Result<(), JavaError> { let mut config = load_java_config(app_handle); config.preferred_java_path = path; save_java_config(app_handle, &config) @@ -82,11 +104,11 @@ pub fn get_preferred_java_path(app_handle: &AppHandle) -> Option<String> { } #[allow(dead_code)] -pub fn update_last_detection_time(app_handle: &AppHandle) -> Result<(), String> { +pub fn update_last_detection_time(app_handle: &AppHandle) -> Result<(), JavaError> { let mut config = load_java_config(app_handle); config.last_detection_time = std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) - .unwrap() + .map_err(|e| JavaError::Other(format!("System time error: {}", e)))? .as_secs(); save_java_config(app_handle, &config) } |