From 9b6db9773ad2f144cbcb98e32405e05a5cfddbac Mon Sep 17 00:00:00 2001 From: rozwader Date: Wed, 12 Aug 2026 13:29:46 +0200 Subject: [PATCH 1/2] feat: added invalidating java runtimes on new java runtime download; chaged toast to track the progress of unpacking downloaded package --- packages/oneclient_app/src/hooks/actions.rs | 7 +++++-- packages/oneclient_java/src/install.rs | 1 + packages/oneclient_java/src/service.rs | 20 ++++++++++++++++++-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/packages/oneclient_app/src/hooks/actions.rs b/packages/oneclient_app/src/hooks/actions.rs index aee585fc..f684b43c 100644 --- a/packages/oneclient_app/src/hooks/actions.rs +++ b/packages/oneclient_app/src/hooks/actions.rs @@ -20,7 +20,7 @@ use oneclient_events::{Answer, Level}; use tokio::sync::mpsc; use crate::components::IconType; -use crate::launcher; +use crate::{invalidate_java_queries, launcher}; use crate::notifications::{ ClusterUpdateSummary, NotificationAction, NotificationSpec, PackageUpdateGroup, PendingPrompt, }; @@ -438,7 +438,10 @@ impl Actions { let Ok(state) = launcher::state() else { return }; let events = state.services.events.clone(); match state.java.install_runtime_from(&vendor, major).await { - Ok(_) => events.signal(oneclient_events::Signal::JavaChanged), + Ok(_) => { + events.signal(oneclient_events::Signal::JavaChanged); + invalidate_java_queries().await + }, Err(err) => events .notify("Java install failed") .body(err.to_string()) diff --git a/packages/oneclient_java/src/install.rs b/packages/oneclient_java/src/install.rs index 1e81c076..31499ca3 100644 --- a/packages/oneclient_java/src/install.rs +++ b/packages/oneclient_java/src/install.rs @@ -67,6 +67,7 @@ pub async fn install_package( if let Some(child) = &child { child.set_phase(TaskPhase::Extracting); } + //events.notify("Extracting package...").body(format!("{} {}", package.vendor, major)).send(); match package.archive { PackageArchive::Zip => polyio::extract_zip(&archive_path, &extract_root).await?, diff --git a/packages/oneclient_java/src/service.rs b/packages/oneclient_java/src/service.rs index 37ba938c..6a70b6f2 100644 --- a/packages/oneclient_java/src/service.rs +++ b/packages/oneclient_java/src/service.rs @@ -221,14 +221,30 @@ impl JavaService { &self, vendor: &JavaVendor, major: u32, + ) -> JavaResult { + self.install_vendor_runtime(vendor, major, None).await + } + + #[tracing::instrument(level = "debug", skip(self, progress))] + async fn install_vendor_runtime( + &self, + vendor: &JavaVendor, + major: u32, + progress: Option<&GroupedProgressSession>, ) -> JavaResult { let provider = provider_for_vendor(vendor).ok_or(JavaError::PackageNotFound { major })?; let package = provider .latest_package_by_major(major, &self.net) .await? .ok_or(JavaError::PackageNotFound { major })?; + + let owned = progress.is_none().then(|| { + GroupedProgressSession::start(&self.events, format!("Installing Java {major}")) + }); + let session = progress.or(owned.as_ref()).expect("session present"); + let executable = provider - .install_package(&package, &self.net, &self.events, None) + .install_package(&package, &self.net, &self.events, Some(session)) .await?; self.register_checked(&executable, Some(major)).await @@ -265,7 +281,7 @@ impl JavaService { Some(vendor) => { let vendor = JavaVendor::from_str(vendor) .unwrap_or_else(|_| JavaVendor::Other(vendor.to_string())); - self.install_runtime_from(&vendor, major).await + self.install_vendor_runtime(&vendor, major, progress).await } None => self.download_and_register(major, progress).await, }, From 7d703e4e98e5fafc971416f3b6a9f7b20cf52671 Mon Sep 17 00:00:00 2001 From: rozwader Date: Wed, 12 Aug 2026 14:50:38 +0200 Subject: [PATCH 2/2] feat: added refresh button for java runtimes, disabled for now --- .../src/view/app/settings/java.rs | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/packages/oneclient_app/src/view/app/settings/java.rs b/packages/oneclient_app/src/view/app/settings/java.rs index ab0cbf31..77449666 100644 --- a/packages/oneclient_app/src/view/app/settings/java.rs +++ b/packages/oneclient_app/src/view/app/settings/java.rs @@ -4,6 +4,7 @@ use oneclient_java::{JavaRuntime, JavaVendor}; use super::settings_page; use crate::components::{Button, Icon, IconType, JavaInstallManager, ScrollArea}; use crate::hooks::{Actions, java_runtimes, use_dispatch, use_java_runtimes}; +use crate::invalidate_java_queries; use crate::theme::colors; use crate::ui::border_all_color; use crate::view::app::settings::section_header; @@ -18,10 +19,40 @@ impl Component for SettingsJava { let runtimes = java_runtimes(&runtimes_query); let mut show_manager = use_state(|| false); + fn invalidate_runtimes(dispatch: Actions) { + spawn(async move { + invalidate_java_queries().await; + dispatch + .notify("Java runtimes refreshed") + .body("The installed runtime list is up to date") + .info() + .send(); + }); + } + + let refresh_dispatch = dispatch.clone(); + let mut shell = settings_page() .child(section_header("ADD RUNTIME")) .child(AddRow { show_manager }.into_element()) - .child(section_header("INSTALLED RUNTIMES")) + .child( + rect() + .width(Size::Fill) + .direction(Direction::Horizontal) + .main_align(Alignment::SpaceBetween) + .cross_align(Alignment::Center) + .child(section_header("INSTALLED RUNTIMES")) + .child( + Button::new() + .secondary() + .small() + .enabled(false) // disabled for now + .on_press(move |_| { + invalidate_runtimes(refresh_dispatch.clone()); + }) + .child(label().text("Refresh")) + ) + ) .child(runtimes_table(runtimes)); if *show_manager.read() {