diff options
| author | 2026-01-29 15:39:55 +0800 | |
|---|---|---|
| committer | 2026-01-29 15:39:55 +0800 | |
| commit | 2181e4a26c1581b4402312a7974f00cefb125752 (patch) | |
| tree | 8d38ce794f4b31ad1de9e61738eba125acc39ddd /src-tauri/src/core/java/priority.rs | |
| parent | 410c949b87424b4ac0df5e3f38930781c6eda147 (diff) | |
| parent | 5d630a24bed07dca20b6ddf55ffe4be36399ad0f (diff) | |
| download | DropOut-2181e4a26c1581b4402312a7974f00cefb125752.tar.gz DropOut-2181e4a26c1581b4402312a7974f00cefb125752.zip | |
Refactor Java runtime to async modular system with Adoptium support (#82)
Diffstat (limited to 'src-tauri/src/core/java/priority.rs')
| -rw-r--r-- | src-tauri/src/core/java/priority.rs | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src-tauri/src/core/java/priority.rs b/src-tauri/src/core/java/priority.rs new file mode 100644 index 0000000..e456680 --- /dev/null +++ b/src-tauri/src/core/java/priority.rs @@ -0,0 +1,59 @@ +use tauri::AppHandle; + +use super::JavaInstallation; +use crate::core::java::persistence; +use crate::core::java::validation; + +pub async fn resolve_java_for_launch( + app_handle: &AppHandle, + instance_java_override: Option<&str>, + global_java_path: Option<&str>, + required_major_version: Option<u64>, + max_major_version: Option<u32>, +) -> Option<JavaInstallation> { + if let Some(override_path) = instance_java_override { + if !override_path.is_empty() { + let path_buf = std::path::PathBuf::from(override_path); + if let Some(java) = validation::check_java_installation(&path_buf).await { + if is_version_compatible(&java, required_major_version, max_major_version) { + return Some(java); + } + } + } + } + + if let Some(global_path) = global_java_path { + if !global_path.is_empty() { + let path_buf = std::path::PathBuf::from(global_path); + if let Some(java) = validation::check_java_installation(&path_buf).await { + if is_version_compatible(&java, required_major_version, max_major_version) { + return Some(java); + } + } + } + } + + let preferred = persistence::get_preferred_java_path(app_handle); + if let Some(pref_path) = preferred { + let path_buf = std::path::PathBuf::from(&pref_path); + if let Some(java) = validation::check_java_installation(&path_buf).await { + if is_version_compatible(&java, required_major_version, max_major_version) { + return Some(java); + } + } + } + + let installations = super::detect_all_java_installations(app_handle).await; + installations + .into_iter() + .find(|java| is_version_compatible(java, required_major_version, max_major_version)) +} + +fn is_version_compatible( + java: &JavaInstallation, + required_major_version: Option<u64>, + max_major_version: Option<u32>, +) -> bool { + let major = validation::parse_java_version(&java.version); + validation::is_version_compatible(major, required_major_version, max_major_version) +} |