From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id F20EB1FF17E for ; Thu, 27 Nov 2025 11:45:15 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 3EA6C174; Thu, 27 Nov 2025 11:45:36 +0100 (CET) From: Lukas Wagner To: pdm-devel@lists.proxmox.com Date: Thu, 27 Nov 2025 11:44:45 +0100 Message-ID: <20251127104447.162951-17-l.wagner@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251127104447.162951-1-l.wagner@proxmox.com> References: <20251127104447.162951-1-l.wagner@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1764240258206 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.032 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pdm-devel] [PATCH datacenter-manager 11/13] ui: remote updates: don't attempt to load current status for unavailable nodes X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Datacenter Manager development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" If the cached update status indicates that a node is unavailable, don't attempt to load the repo status and update table. Instead, show the error message from the last poll attempt in-place where the tables would else be. This avoids annoying error pop-ups when navigating through the remote/node tree in the global update view. Signed-off-by: Lukas Wagner --- ui/src/remotes/updates.rs | 126 +++++++++++++++++++++----------------- 1 file changed, 69 insertions(+), 57 deletions(-) diff --git a/ui/src/remotes/updates.rs b/ui/src/remotes/updates.rs index cf025157..7284fd47 100644 --- a/ui/src/remotes/updates.rs +++ b/ui/src/remotes/updates.rs @@ -397,9 +397,19 @@ impl UpdateTreeComponent { } fn render_update_list_panel(&self, ctx: &LoadableComponentContext) -> Panel { + let mut panel = Panel::new() + .class(FlexFit) + .border(true) + .min_width(500) + .style("flex", "1 1 0"); + match &self.selected_entry { Some(UpdateTreeEntry::Node(NodeEntry { - remote, node, ty, .. + remote, + node, + ty, + summary, + .. })) => { let title: Html = Row::new() .gap(2) @@ -408,62 +418,68 @@ impl UpdateTreeComponent { .with_child(tr!("Update List - {} ({})", remote, node)) .into(); - let base_url = format!("/{ty}/remotes/{remote}/nodes/{node}/apt",); - let task_base_url = format!("/{ty}/remotes/{remote}/tasks"); + if summary.status == NodeUpdateStatus::Success { + let base_url = format!("/{ty}/remotes/{remote}/nodes/{node}/apt",); + let task_base_url = format!("/{ty}/remotes/{remote}/tasks"); - let apt = AptPackageManager::new() - .base_url(base_url.clone()) - .task_base_url(task_base_url) - .enable_upgrade(true) - .on_upgrade({ - let remote = remote.clone(); - let link = ctx.link().clone(); - let remote = remote.clone(); - let node = node.clone(); - let ty = *ty; + let apt = AptPackageManager::new() + .base_url(base_url.clone()) + .task_base_url(task_base_url) + .enable_upgrade(true) + .on_upgrade({ + let remote = remote.clone(); + let link = ctx.link().clone(); + let remote = remote.clone(); + let node = node.clone(); + let ty = *ty; - move |_| match ty { - RemoteType::Pve => { - let id = format!("node/{node}::apt"); - if let Some(url) = get_deep_url(link.yew_link(), &remote, None, &id) - { - let _ = gloo_utils::window().open_with_url(&url.href()); + move |_| match ty { + RemoteType::Pve => { + let id = format!("node/{node}::apt"); + if let Some(url) = + get_deep_url(link.yew_link(), &remote, None, &id) + { + let _ = gloo_utils::window().open_with_url(&url.href()); + } + } + RemoteType::Pbs => { + let hash = "#pbsServerAdministration:updates"; + if let Some(url) = + get_deep_url_low_level(link.yew_link(), &remote, None, hash) + { + let _ = gloo_utils::window().open_with_url(&url.href()); + } } } - RemoteType::Pbs => { - let hash = "#pbsServerAdministration:updates"; - if let Some(url) = - get_deep_url_low_level(link.yew_link(), &remote, None, hash) - { - let _ = gloo_utils::window().open_with_url(&url.href()); - } - } - } - }); + }); - let product = match ty { - RemoteType::Pve => ExistingProduct::PVE, - RemoteType::Pbs => ExistingProduct::PBS, - }; + let product = match ty { + RemoteType::Pve => ExistingProduct::PVE, + RemoteType::Pbs => ExistingProduct::PBS, + }; - let repo_status = Container::new().min_height(150).with_child( - AptRepositories::new() - .product(product) - .status_only(true) - .base_url(base_url), - ); + let repo_status = Container::new().min_height(150).with_child( + AptRepositories::new() + .product(product) + .status_only(true) + .base_url(base_url), + ); - Panel::new() - .class(FlexFit) - .title(title) - .border(true) - .min_width(500) - .with_child(repo_status) - .with_child( - html! {