]> git.proxmox.com Git - proxmox-backup.git/commitdiff
ui: tape: handle tapes in changers without barcode
authorDominik Csapak <d.csapak@proxmox.com>
Fri, 30 Apr 2021 08:13:13 +0000 (10:13 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 30 Apr 2021 08:23:53 +0000 (10:23 +0200)
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

Note: Changed the load-slot API from PUT to POST

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
src/api2/tape/drive.rs
www/tape/ChangerStatus.js

index cb1b26e3f8ebfe2359c2f4b0857de0da25822a02..c97de61ac83754279cdea5598572846ed3c0ec9f 100644 (file)
@@ -1453,7 +1453,7 @@ pub const SUBDIRS: SubdirMap = &sorted!([
     (
         "load-slot",
         &Router::new()
-            .put(&API_METHOD_LOAD_SLOT)
+            .post(&API_METHOD_LOAD_SLOT)
     ),
     (
         "cartridge-memory",
index ff8a436c37b70619baea5017d486c9f688ed9525..f4bcc631abfa2bb011fb2c2dd04041a9e136e11b 100644 (file)
@@ -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 !== "" ? 'load-media' : 'load-slot';
+           let params = label !== "" ? { '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("<no-barcode>");
+           }
+
+           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,