From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id A7AB3697BC for ; Fri, 13 Nov 2020 14:17:19 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 047EE1B483 for ; Fri, 13 Nov 2020 14:16:48 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 227B21B198 for ; Fri, 13 Nov 2020 14:16:40 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id BDC3842DD9 for ; Fri, 13 Nov 2020 14:16:39 +0100 (CET) From: Fabian Ebner To: pve-devel@lists.proxmox.com Date: Fri, 13 Nov 2020 14:16:27 +0100 Message-Id: <20201113131633.21915-15-f.ebner@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201113131633.21915-1-f.ebner@proxmox.com> References: <20201113131633.21915-1-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.023 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust 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. [me.storage, me.sm] Subject: [pve-devel] [PATCH v3 manager 14/20] create ImageView and use it for VM and CT images 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: , X-List-Received-Date: Fri, 13 Nov 2020 13:17:19 -0000 The enableFn's that were responsible for switching between the image remove button and the standard remove button are not needed anymore. Signed-off-by: Fabian Ebner --- www/manager6/Makefile | 1 + www/manager6/storage/Browser.js | 4 +- www/manager6/storage/ContentView.js | 64 ++---------------------- www/manager6/storage/ImageView.js | 76 +++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 63 deletions(-) create mode 100644 www/manager6/storage/ImageView.js diff --git a/www/manager6/Makefile b/www/manager6/Makefile index be1f1888..6111a9ce 100644 --- a/www/manager6/Makefile +++ b/www/manager6/Makefile @@ -242,6 +242,7 @@ JSSRC= \ storage/ContentView.js \ storage/DirEdit.js \ storage/GlusterFsEdit.js \ + storage/ImageView.js \ storage/IScsiEdit.js \ storage/LVMEdit.js \ storage/LvmThinEdit.js \ diff --git a/www/manager6/storage/Browser.js b/www/manager6/storage/Browser.js index 53d8828c..c815ad03 100644 --- a/www/manager6/storage/Browser.js +++ b/www/manager6/storage/Browser.js @@ -59,7 +59,7 @@ Ext.define('PVE.storage.Browser', { } if (contents.includes('images')) { items.push({ - xtype: 'pveStorageContentView', + xtype: 'pveStorageImageView', title: gettext('Disk Images'), iconCls: 'fa fa-hdd-o', itemId: 'contentImages', @@ -82,7 +82,7 @@ Ext.define('PVE.storage.Browser', { } if (contents.includes('rootdir')) { items.push({ - xtype: 'pveStorageContentView', + xtype: 'pveStorageImageView', title: gettext('Container Data'), iconCls: 'fa fa-hdd-o', itemId: 'contentRootdir', diff --git a/www/manager6/storage/ContentView.js b/www/manager6/storage/ContentView.js index 8da2db7e..f3174e2e 100644 --- a/www/manager6/storage/ContentView.js +++ b/www/manager6/storage/ContentView.js @@ -269,83 +269,25 @@ Ext.define('PVE.storage.ContentView', { } }); - var imageRemoveButton; var removeButton = Ext.create('Proxmox.button.StdRemoveButton',{ selModel: sm, delay: 5, - enableFn: function(rec) { - if (rec && rec.data.content !== 'images' && - rec.data.content !== 'rootdir') { - imageRemoveButton.setVisible(false); - removeButton.setVisible(true); - return true; - } - return false; - }, callback: function() { reload(); }, baseurl: baseurl + '/' }); - imageRemoveButton = Ext.create('Proxmox.button.Button',{ - selModel: sm, - hidden: true, - text: gettext('Remove'), - enableFn: function(rec) { - if (rec && (rec.data.content === 'images' || - rec.data.content === 'rootdir')) { - removeButton.setVisible(false); - imageRemoveButton.setVisible(true); - return true; - } - return false; - }, - handler: function(btn, event, rec) { - var url = baseurl + '/' + rec.data.volid; - var vmid = rec.data.vmid; - - var store = PVE.data.ResourceStore; - - if (vmid && store.findVMID(vmid)) { - var guest_node = store.guestNode(vmid); - var storage_path = 'storage/' + nodename + '/' + storage; - - // allow to delete local backed images if a VMID exists on another node. - if (store.storageIsShared(storage_path) || guest_node == nodename) { - var msg = Ext.String.format( - gettext("Cannot remove image, a guest with VMID '{0}' exists!"), vmid); - msg += '
' + gettext("You can delete the image from the guest's hardware pane"); - - Ext.Msg.show({ - title: gettext('Cannot remove disk image.'), - icon: Ext.Msg.ERROR, - msg: msg - }); - return; - } - } - var win = Ext.create('PVE.window.SafeDestroy', { - title: Ext.String.format(gettext("Destroy '{0}'"), rec.data.volid), - showProgress: true, - url: url, - item: { type: 'Image', id: vmid } - }).show(); - win.on('destroy', function() { - reload(); - }); - } - }); - if (!me.tbar) { me.tbar = []; } if (me.useUploadButton) { me.tbar.push(uploadButton); } + if (!me.useCustomRemoveButton) { + me.tbar.push(removeButton); + } me.tbar.push( - removeButton, - imageRemoveButton, '->', gettext('Search') + ':', ' ', { diff --git a/www/manager6/storage/ImageView.js b/www/manager6/storage/ImageView.js new file mode 100644 index 00000000..97dae567 --- /dev/null +++ b/www/manager6/storage/ImageView.js @@ -0,0 +1,76 @@ +Ext.define('PVE.storage.ImageView', { + extend: 'PVE.storage.ContentView', + + alias: 'widget.pveStorageImageView', + + initComponent: function() { + var me = this; + + var nodename = me.nodename = me.pveSelNode.data.node; + if (!me.nodename) { + throw "no node name specified"; + } + + var storage = me.storage = me.pveSelNode.data.storage; + if (!me.storage) { + throw "no storage ID specified"; + } + + if (!me.content || (me.content !== 'images' && me.content !== 'rootdir')) { + throw "content needs to be either 'images' or 'rootdir'"; + } + + var sm = me.sm = Ext.create('Ext.selection.RowModel', {}); + + var reload = function() { + me.store.load(); + } + + me.tbar = [ + { + xtype: 'proxmoxButton', + selModel: sm, + text: gettext('Remove'), + disabled: true, + handler: function(btn, event, rec) { + var url = "/nodes/" + nodename + "/storage/" + storage + + "/content" + '/' + rec.data.volid; + var vmid = rec.data.vmid; + + var store = PVE.data.ResourceStore; + + if (vmid && store.findVMID(vmid)) { + var guest_node = store.guestNode(vmid); + var storage_path = 'storage/' + nodename + '/' + storage; + + // allow to delete local backed images if a VMID exists on another node. + if (store.storageIsShared(storage_path) || guest_node == nodename) { + var msg = Ext.String.format( + gettext("Cannot remove image, a guest with VMID '{0}' exists!"), vmid); + msg += '
' + gettext("You can delete the image from the guest's hardware pane"); + + Ext.Msg.show({ + title: gettext('Cannot remove disk image.'), + icon: Ext.Msg.ERROR, + msg: msg + }); + return; + } + } + var win = Ext.create('PVE.window.SafeDestroy', { + title: Ext.String.format(gettext("Destroy '{0}'"), rec.data.volid), + showProgress: true, + url: url, + item: { type: 'Image', id: vmid } + }).show(); + win.on('destroy', function() { + reload(); + }); + } + }, + ]; + me.useCustomRemoveButton = true; + + me.callParent(); + }, +}); -- 2.20.1