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 A946E786B2 for ; Fri, 30 Apr 2021 10:45:12 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 97C3825696 for ; Fri, 30 Apr 2021 10:45:12 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (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 4584025688 for ; Fri, 30 Apr 2021 10:45:11 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 6D54046491 for ; Fri, 30 Apr 2021 10:45:00 +0200 (CEST) Date: Fri, 30 Apr 2021 10:44:53 +0200 (CEST) From: Dietmar Maurer To: Proxmox Backup Server development discussion , Dominik Csapak Message-ID: <1597661483.2050.1619772293063@webmail.proxmox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Priority: 3 Importance: Normal X-Mailer: Open-Xchange Mailer v7.10.5-Rev9 X-Originating-Client: open-xchange-appsuite X-SPAM-LEVEL: Spam detection results: 0 AWL 0.223 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment PROLO_LEO1 0.1 Meta Catches all Leo drug variations so far 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. [record.data, proxmox.com, rec.data] Subject: [pbs-devel] applied: [PATCH proxmox-backup v2] ui: tape: handle tapes in changers without barcode X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Apr 2021 08:45:12 -0000 applied with some additional changes - fixed logic to select api path - changed load-slot API from PUT to POST > On 04/30/2021 10:13 AM Dominik Csapak wrote: > > > by checking for definedness of the label (tapes without barcode > have the empty string as label-text) and falling back to the > source slot for the load action > > Signed-off-by: Dominik Csapak > --- > changes from v1: > * correctly implement renderLabel > > www/tape/ChangerStatus.js | 66 +++++++++++++++++++++++++++------------ > 1 file changed, 46 insertions(+), 20 deletions(-) > > diff --git a/www/tape/ChangerStatus.js b/www/tape/ChangerStatus.js > index ff8a436c..e4bab18d 100644 > --- a/www/tape/ChangerStatus.js > +++ b/www/tape/ChangerStatus.js > @@ -7,6 +7,12 @@ Ext.define('pbs-slot-model', { > return data.state !== undefined; > }, > }, > + { > + name: 'is-empty', > + calculate: function(data) { > + return data['label-text'] === undefined; > + }, > + }, > ], > idProperty: 'entry-id', > }); > @@ -179,17 +185,19 @@ Ext.define('PBS.TapeManagement.ChangerStatus', { > let me = this; > let view = me.getView(); > let label = record.data['label-text']; > + let slot = record.data['entry-id']; > > let changer = encodeURIComponent(view.changer); > let singleDrive = me.drives.length === 1 ? me.drives[0] : undefined; > > + let apiCall = label !== undefined ? 'load-media' : 'load-slot'; > + let params = label !== undefined ? { 'label-text': label } : { 'source-slot': slot }; > + > if (singleDrive !== undefined) { > Proxmox.Utils.API2Request({ > method: 'POST', > - params: { > - 'label-text': label, > - }, > - url: `/api2/extjs/tape/drive/${singleDrive}/load-media`, > + params, > + url: `/api2/extjs/tape/drive/${singleDrive}/${apiCall}`, > success: function(response, opt) { > Ext.create('Proxmox.window.TaskProgress', { > upid: response.result.data, > @@ -213,15 +221,21 @@ Ext.define('PBS.TapeManagement.ChangerStatus', { > submitUrl: function(url, values) { > let drive = values.drive; > delete values.drive; > - return `${url}/${encodeURIComponent(drive)}/load-media`; > + return `${url}/${encodeURIComponent(drive)}/${apiCall}`; > }, > items: [ > - { > + label !== undefined ? { > xtype: 'displayfield', > name: 'label-text', > value: label, > submitValue: true, > fieldLabel: gettext('Media'), > + } : { > + xtype: 'displayfield', > + name: 'source-slot', > + value: slot, > + submitValue: true, > + fieldLabel: gettext('Source Slot'), > }, > { > xtype: 'pbsDriveSelector', > @@ -589,6 +603,18 @@ Ext.define('PBS.TapeManagement.ChangerStatus', { > me.scheduleReload(5000); > }, > > + renderLabel: function(value) { > + if (value === undefined) { > + return ''; > + } > + > + if (value === "") { > + return Ext.htmlEncode(""); > + } > + > + return value; > + }, > + > renderIsLabeled: function(value, mD, record) { > if (!record.data['label-text']) { > return ""; > @@ -704,7 +730,7 @@ Ext.define('PBS.TapeManagement.ChangerStatus', { > text: gettext("Content"), > dataIndex: 'label-text', > flex: 1, > - renderer: (value) => value || '', > + renderer: 'renderLabel', > }, > { > text: gettext('Inventory'), > @@ -721,19 +747,19 @@ Ext.define('PBS.TapeManagement.ChangerStatus', { > iconCls: 'fa fa-rotate-90 fa-exchange', > handler: 'slotTransfer', > tooltip: gettext('Transfer'), > - isDisabled: (v, r, c, i, rec) => !rec.data['label-text'], > + isDisabled: (v, r, c, i, rec) => rec.data['is-empty'], > }, > { > iconCls: 'fa fa-trash-o', > handler: 'format', > tooltip: gettext('Format'), > - isDisabled: (v, r, c, i, rec) => !rec.data['label-text'], > + isDisabled: (v, r, c, i, rec) => rec.data['is-empty'], > }, > { > iconCls: 'fa fa-rotate-90 fa-upload', > handler: 'load', > tooltip: gettext('Load'), > - isDisabled: (v, r, c, i, rec) => !rec.data['label-text'], > + isDisabled: (v, r, c, i, rec) => rec.data['is-empty'], > }, > ], > }, > @@ -765,7 +791,7 @@ Ext.define('PBS.TapeManagement.ChangerStatus', { > handler: 'labelMedia', > iconCls: 'fa fa-barcode', > disabled: true, > - enableFn: (rec) => rec.data["label-text"] !== undefined, > + enableFn: (rec) => !rec.data["is-empty"], > }, > { > text: gettext('Catalog'), > @@ -773,7 +799,7 @@ Ext.define('PBS.TapeManagement.ChangerStatus', { > handler: 'catalog', > iconCls: 'fa fa-book', > disabled: true, > - enableFn: (rec) => rec.data["label-text"] !== undefined, > + enableFn: (rec) => !rec.data["is-empty"], > }, > { > text: gettext('Format'), > @@ -781,7 +807,7 @@ Ext.define('PBS.TapeManagement.ChangerStatus', { > handler: 'format-inserted', > iconCls: 'fa fa-trash-o', > disabled: true, > - enableFn: (rec) => rec.data["label-text"] !== undefined, > + enableFn: (rec) => !rec.data["is-empty"], > dangerous: true, > confirmMsg: gettext('Are you sure you want to format the inserted tape?'), > }, > @@ -805,7 +831,7 @@ Ext.define('PBS.TapeManagement.ChangerStatus', { > text: gettext("Content"), > dataIndex: 'label-text', > flex: 1, > - renderer: (value) => value || '', > + renderer: 'renderLabel', > }, > { > text: gettext('Inventory'), > @@ -859,25 +885,25 @@ Ext.define('PBS.TapeManagement.ChangerStatus', { > iconCls: 'fa fa-rotate-270 fa-upload', > handler: 'unload', > tooltip: gettext('Unload'), > - isDisabled: (v, r, c, i, rec) => !rec.data['label-text'] || rec.data['is-blocked'], > + isDisabled: (v, r, c, i, rec) => rec.data['is-empty'] || rec.data['is-blocked'], > }, > { > iconCls: 'fa fa-hdd-o', > handler: 'cartridgeMemory', > tooltip: gettext('Cartridge Memory'), > - isDisabled: (v, r, c, i, rec) => !rec.data['label-text'] || rec.data['is-blocked'], > + isDisabled: (v, r, c, i, rec) => rec.data['is-empty'] || rec.data['is-blocked'], > }, > { > iconCls: 'fa fa-line-chart', > handler: 'volumeStatistics', > tooltip: gettext('Volume Statistics'), > - isDisabled: (v, r, c, i, rec) => !rec.data['label-text'] || rec.data['is-blocked'], > + isDisabled: (v, r, c, i, rec) => rec.data['is-empty'] || rec.data['is-blocked'], > }, > { > iconCls: 'fa fa-tag', > handler: 'readLabel', > tooltip: gettext('Read Label'), > - isDisabled: (v, r, c, i, rec) => !rec.data['label-text'] || rec.data['is-blocked'], > + isDisabled: (v, r, c, i, rec) => rec.data['is-empty'] || rec.data['is-blocked'], > }, > { > iconCls: 'fa fa-info-circle', > @@ -910,7 +936,7 @@ Ext.define('PBS.TapeManagement.ChangerStatus', { > { > text: gettext("Content"), > dataIndex: 'label-text', > - renderer: (value) => value || '', > + renderer: 'renderLabel', > flex: 1, > }, > { > @@ -927,7 +953,7 @@ Ext.define('PBS.TapeManagement.ChangerStatus', { > iconCls: 'fa fa-rotate-270 fa-upload', > handler: 'importTape', > tooltip: gettext('Import'), > - isDisabled: (v, r, c, i, rec) => !rec.data['label-text'], > + isDisabled: (v, r, c, i, rec) => rec.data['is-empty'], > }, > ], > width: 80, > -- > 2.20.1 > > > > _______________________________________________ > pbs-devel mailing list > pbs-devel@lists.proxmox.com > https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel