From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 86D4A1FF141 for ; Tue, 02 Jun 2026 13:53:53 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 0F872117B6; Tue, 2 Jun 2026 13:53:53 +0200 (CEST) From: Dominik Csapak To: pmg-devel@lists.proxmox.com Subject: [PATCH pmg-yew-quarantine-gui 3/3] spam list page: add 'about' button to menu Date: Tue, 2 Jun 2026 13:53:42 +0200 Message-ID: <20260602115348.2333552-4-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260602115348.2333552-1-d.csapak@proxmox.com> References: <20260602115348.2333552-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.049 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 Message-ID-Hash: 6BYK2GIYIUUE4P5BUCKVEDI24RJWAPUP X-Message-ID-Hash: 6BYK2GIYIUUE4P5BUCKVEDI24RJWAPUP X-MailFrom: d.csapak@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox Mail Gateway development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Which shows a text very similar to the about text in the desktop ui. It is slightly adapted so it fits better for the mobile view (no mention of allow/blacklist menu, no mention of keyboard shortcuts). I opted for an additional menu option here, since we don't have the space for an action icon in the top bar on smaller devices. Signed-off-by: Dominik Csapak --- src/page_spam_list.rs | 53 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/src/page_spam_list.rs b/src/page_spam_list.rs index 5a3dacd..d24fec7 100644 --- a/src/page_spam_list.rs +++ b/src/page_spam_list.rs @@ -18,10 +18,33 @@ use pwt::widget::menu::{Menu, MenuButton, MenuItem}; use pwt::widget::{Button, Column, Dialog, Image, LanguageSelector, Row, ThemeModeSelector}; use proxmox_subscription::{SubscriptionInfo, SubscriptionStatus}; -use proxmox_yew_comp::http_get; +use proxmox_yew_comp::{http_get, Markdown}; use crate::{Route, SpamList}; +const ABOUT_TEXT: &str = + "This is the end-user email quarantine interface provided by your email provider. + +Proxmox Mail Gateway is software that scans email for threats such as spam or viruses. + +Typically, emails that contain viruses or are identified as specific spam are blocked by your +provider. +Emails that are not classified as specific spam can be quarantined for the recipient to decide +whether to receive or delete them. In most setups, you will receive a spam report email notifying +you when mail is quarantined for your address. + +You also have the option to block or welcomelist certain addresses: + +* Welcomelist results in mails from these addresses to be delivered directly + instead of being quarantined. +* Blocklist results in mails from these addresses to be deleted directly + instead of being quarantined. + +**Note:** The sending of *Spam Report* emails and this web application is controlled by your email +provider. + +Proxmox Server Solutions GmbH develops the software and does not operate email services for users."; + #[derive(Clone, PartialEq, Properties)] pub struct PageSpamList {} @@ -43,6 +66,7 @@ pub enum ViewState { ShowDialog, ShowSubscriptionNotice, ShowLanguageSelect, + ShowAbout, } pub struct PmgPageSpamList { state: ViewState, @@ -61,6 +85,7 @@ pub enum Msg { SubscriptionResult(Result), SwitchToDesktop, ShowLanguageSelect, + ShowAbout, Logout, } @@ -200,6 +225,10 @@ impl Component for PmgPageSpamList { self.state = ViewState::ShowLanguageSelect; true } + Msg::ShowAbout => { + self.state = ViewState::ShowAbout; + true + } Msg::Logout => { proxmox_yew_comp::http_clear_auth(); true @@ -249,6 +278,23 @@ impl Component for PmgPageSpamList { ) .on_close(link.callback(|_| Msg::CloseDialog)), ), + ViewState::ShowAbout => Some( + Dialog::new(tr!("About")) + .with_child( + Column::new() + .class(FlexFit) + .padding_x(2) + .padding_bottom(2) + .with_child(Markdown::new().class(FlexFit).text(ABOUT_TEXT)) + .with_child( + Row::new().class(JustifyContent::FlexEnd).with_child( + Button::new(tr!("OK")) + .on_activate(link.callback(|_| Msg::CloseDialog)), + ), + ), + ) + .on_close(link.callback(|_| Msg::CloseDialog)), + ), }; let fab = Fab::new("fa fa-calendar").on_activate(link.callback(|_| Msg::ShowDialog)); @@ -304,6 +350,11 @@ impl Component for PmgPageSpamList { link.callback(|_| Msg::SwitchToDesktop), ), ) + .with_item( + MenuItem::new(tr!("About")) + .icon_class("fa fa-question-circle") + .on_select(link.callback(|_| Msg::ShowAbout)), + ) .with_separator() .with_item( MenuItem::new(tr!("Logout")) -- 2.47.3