aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src-tauri/src/core/java/providers/adoptium.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src-tauri/src/core/java/providers/adoptium.rs')
-rw-r--r--src-tauri/src/core/java/providers/adoptium.rs103
1 files changed, 57 insertions, 46 deletions
diff --git a/src-tauri/src/core/java/providers/adoptium.rs b/src-tauri/src/core/java/providers/adoptium.rs
index dfd4c0e..53d1519 100644
--- a/src-tauri/src/core/java/providers/adoptium.rs
+++ b/src-tauri/src/core/java/providers/adoptium.rs
@@ -91,77 +91,88 @@ impl JavaProvider for AdoptiumProvider {
.await
.map_err(|e| format!("Failed to parse available releases: {}", e))?;
- let mut releases = Vec::new();
+ // Parallelize HTTP requests for better performance
+ let mut fetch_tasks = Vec::new();
for major_version in &available.available_releases {
for image_type in &["jre", "jdk"] {
+ let major_version = *major_version;
+ let image_type = image_type.to_string();
let url = format!(
"{}/assets/latest/{}/hotspot?os={}&architecture={}&image_type={}",
ADOPTIUM_API_BASE, major_version, os, arch, image_type
);
-
- match client
- .get(&url)
- .header("Accept", "application/json")
- .send()
- .await
- {
- Ok(response) => {
- if response.status().is_success() {
- if let Ok(assets) = response.json::<Vec<AdoptiumAsset>>().await {
- if let Some(asset) = assets.into_iter().next() {
- let release_date = asset.binary.updated_at.clone();
- let release_info = JavaReleaseInfo {
- major_version: *major_version,
- image_type: image_type.to_string(),
- version: asset.version.semver.clone(),
- release_name: asset.release_name.clone(),
- release_date,
- file_size: asset.binary.package.size,
- checksum: asset.binary.package.checksum,
- download_url: asset.binary.package.link,
- is_lts: available
- .available_lts_releases
- .contains(major_version),
- is_available: true,
- architecture: asset.binary.architecture.clone(),
- };
- releases.push(release_info);
+ let client = client.clone();
+ let is_lts = available.available_lts_releases.contains(&major_version);
+ let arch = arch.to_string();
+
+ let task = tokio::spawn(async move {
+ match client
+ .get(&url)
+ .header("Accept", "application/json")
+ .send()
+ .await
+ {
+ Ok(response) => {
+ if response.status().is_success() {
+ if let Ok(assets) = response.json::<Vec<AdoptiumAsset>>().await {
+ if let Some(asset) = assets.into_iter().next() {
+ let release_date = asset.binary.updated_at.clone();
+ return Some(JavaReleaseInfo {
+ major_version,
+ image_type,
+ version: asset.version.semver.clone(),
+ release_name: asset.release_name.clone(),
+ release_date,
+ file_size: asset.binary.package.size,
+ checksum: asset.binary.package.checksum,
+ download_url: asset.binary.package.link,
+ is_lts,
+ is_available: true,
+ architecture: asset.binary.architecture.clone(),
+ });
+ }
}
}
- } else {
- let release_info = JavaReleaseInfo {
- major_version: *major_version,
- image_type: image_type.to_string(),
+ // Fallback for unsuccessful response
+ Some(JavaReleaseInfo {
+ major_version,
+ image_type,
version: format!("{}.x", major_version),
release_name: format!("jdk-{}", major_version),
release_date: None,
file_size: 0,
checksum: None,
download_url: String::new(),
- is_lts: available.available_lts_releases.contains(major_version),
+ is_lts,
is_available: false,
- architecture: arch.to_string(),
- };
- releases.push(release_info);
+ architecture: arch,
+ })
}
- }
- Err(_) => {
- releases.push(JavaReleaseInfo {
- major_version: *major_version,
- image_type: image_type.to_string(),
+ Err(_) => Some(JavaReleaseInfo {
+ major_version,
+ image_type,
version: format!("{}.x", major_version),
release_name: format!("jdk-{}", major_version),
release_date: None,
file_size: 0,
checksum: None,
download_url: String::new(),
- is_lts: available.available_lts_releases.contains(major_version),
+ is_lts,
is_available: false,
- architecture: arch.to_string(),
- });
+ architecture: arch,
+ }),
}
- }
+ });
+ fetch_tasks.push(task);
+ }
+ }
+
+ // Collect all results concurrently
+ let mut releases = Vec::new();
+ for task in fetch_tasks {
+ if let Ok(Some(release)) = task.await {
+ releases.push(release);
}
}