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 CE1F41FF183 for ; Wed, 8 Oct 2025 11:52:25 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id CE4D036DE; Wed, 8 Oct 2025 11:52:28 +0200 (CEST) Mime-Version: 1.0 Date: Wed, 08 Oct 2025 11:51:53 +0200 Message-Id: Cc: "pve-devel" To: "Proxmox VE development discussion" X-Mailer: aerc 0.20.0 References: <20251007121352.102236-1-n.frey@proxmox.com> In-Reply-To: <20251007121352.102236-1-n.frey@proxmox.com> From: "Shannon Sterz" X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1759917083203 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.055 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 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [proxmox.com] Subject: Re: [pve-devel] [PATCH pve-manager v4] ui: fix #6209: create snapshots and backups from context menu X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" On Tue Oct 7, 2025 at 2:13 PM CEST, Nicolas Frey wrote: > The original feature request only specified the ability to take > snapshots. I added the manual backup shortcut as well, since > navigating through the menu for this action felt unnecessarily > cumbersome when performing just a quick backup. > > Changes since v3: > * replace anonymous functions with arrow style functions > * reverted approach from v2 after some experimentation, simulating > latency using chrome dev tools + traffic control > * uses the same approach as in v1/v2 to match behaviour seen in the > Snapshot tab > > Changes since v2: > * rebased > * use autoShow on snapshot and backup windows > * improve UX and account for slow connections by only making API > calls for snapshot feature on button click > > changes since v1, thanks @Fiona Ebner > * clarified commit message > * addressed several issues in the added menu options, namely: > * correctly handle disabled state with async > * fixed negation logic and cleaned up minor nits > > Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=6209 > Signed-off-by: Nicolas Frey > --- > www/manager6/lxc/CmdMenu.js | 49 ++++++++++++++++++++++++++++++++++++ > www/manager6/qemu/CmdMenu.js | 49 ++++++++++++++++++++++++++++++++++++ > 2 files changed, 98 insertions(+) > > diff --git a/www/manager6/lxc/CmdMenu.js b/www/manager6/lxc/CmdMenu.js > index cd60c967..a7940e04 100644 > --- a/www/manager6/lxc/CmdMenu.js > +++ b/www/manager6/lxc/CmdMenu.js > @@ -134,6 +134,40 @@ Ext.define('PVE.lxc.CmdMenu', { > }, > }, > { xtype: 'menuseparator' }, > + { > + text: gettext('Take Snapshot'), > + iconCls: 'fa fa-fw fa-history', > + itemId: 'takeSnapshotBtn', > + disabled: true, > + handler: () => { > + Ext.create('PVE.window.Snapshot', { > + nodename: info.node, > + vmid: info.vmid, > + vmname: info.name, > + viewonly: false, > + type: info.type, > + isCreate: true, > + submitText: gettext('Take Snapshot'), > + autoShow: true, > + running: running, > + }); > + }, > + }, > + { > + text: gettext('Backup now'), > + iconCls: 'fa fa-fw fa-floppy-o', > + disabled: !caps.vms['VM.Backup'], > + handler: () => { > + Ext.create('PVE.window.Backup', { > + nodename: info.node, > + vmid: info.vmid, > + vmtype: info.type, > + vmname: info.name, > + autoShow: true, > + }); > + }, > + }, > + { xtype: 'menuseparator' }, > { > text: gettext('Console'), > iconCls: 'fa fa-fw fa-terminal', > @@ -149,5 +183,20 @@ Ext.define('PVE.lxc.CmdMenu', { > ]; > > me.callParent(); > + > + if (caps.vms['VM.Snapshot']) { > + Proxmox.Utils.API2Request({ > + url: `/nodes/${info.node}/${info.type}/${info.vmid}/feature`, > + params: { feature: 'snapshot' }, > + method: 'GET', > + success: (response) => { > + let hasFeature = response.result.data.hasFeature; > + let btn = me.down('#takeSnapshotBtn'); > + if (btn) { > + btn.setDisabled(!hasFeature); > + } > + }, > + }); > + } > }, > }); > diff --git a/www/manager6/qemu/CmdMenu.js b/www/manager6/qemu/CmdMenu.js > index adf64672..df6045bf 100644 > --- a/www/manager6/qemu/CmdMenu.js > +++ b/www/manager6/qemu/CmdMenu.js > @@ -169,6 +169,40 @@ Ext.define('PVE.qemu.CmdMenu', { > }, > }, > { xtype: 'menuseparator' }, > + { > + text: gettext('Take Snapshot'), > + iconCls: 'fa fa-fw fa-history', > + itemId: 'takeSnapshotBtn', > + disabled: true, > + handler: () => { > + Ext.create('PVE.window.Snapshot', { > + nodename: info.node, > + vmid: info.vmid, > + vmname: info.name, > + viewonly: false, > + type: info.type, > + isCreate: true, > + submitText: gettext('Take Snapshot'), > + autoShow: true, > + running: running, > + }); > + }, > + }, > + { > + text: gettext('Backup now'), > + iconCls: 'fa fa-fw fa-floppy-o', > + disabled: !caps.vms['VM.Backup'], > + handler: () => { > + Ext.create('PVE.window.Backup', { > + nodename: info.node, > + vmid: info.vmid, > + vmtype: info.type, > + vmname: info.name, > + autoShow: true, > + }); > + }, > + }, > + { xtype: 'menuseparator' }, > { > text: gettext('Console'), > iconCls: 'fa fa-fw fa-terminal', > @@ -194,5 +228,20 @@ Ext.define('PVE.qemu.CmdMenu', { > ]; > > me.callParent(); > + > + if (caps.vms['VM.Snapshot']) { > + Proxmox.Utils.API2Request({ > + url: `/nodes/${info.node}/${info.type}/${info.vmid}/feature`, > + params: { feature: 'snapshot' }, > + method: 'GET', > + success: (response) => { > + let hasFeature = response.result.data.hasFeature; > + let btn = me.down('#takeSnapshotBtn'); > + if (btn) { > + btn.setDisabled(!hasFeature); > + } > + }, > + }); > + } > }, > }); looks good to me now, so consider this: Reviewed-by: Shannon Sterz _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel