From 6f3714b9aae5688e1e6ad45cb55e6f47272f2e5c Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Tue, 2 Mar 2021 12:19:40 +0100 Subject: [PATCH] ui: tape/DriveStatus: use the drive state to determine a status-load since the status api call blocks the drive, it only makes sense to do when the drive is idle. so do not reload on activate, but when the drive changes the first time from busy to idle also disable the reload button when the drive is busy Signed-off-by: Dominik Csapak --- www/tape/DriveStatus.js | 42 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/www/tape/DriveStatus.js b/www/tape/DriveStatus.js index c9e9ea02..481f8b0d 100644 --- a/www/tape/DriveStatus.js +++ b/www/tape/DriveStatus.js @@ -18,6 +18,8 @@ Ext.define('PBS.TapeManagement.DriveStatus', { viewModel: { data: { online: false, + busy: true, + loaded: false, }, }, @@ -38,6 +40,33 @@ Ext.define('PBS.TapeManagement.DriveStatus', { vm.set('online', online); }, + onStateLoad: function(store) { + let me = this; + let view = me.getView(); + let vm = me.getViewModel(); + let driveRecord = store.findRecord('name', view.drive, 0, false, true, true); + let busy = !!driveRecord.data.state; + vm.set('busy', busy); + let statusgrid = me.lookup('statusgrid'); + if (!vm.get('loaded')) { + if (busy) { + // have to use a timeout so that the component can be rendered first + // otherwise the 'mask' call errors out + setTimeout(function() { + statusgrid.mask(gettext('Drive is busy')); + }, 10); + } else { + // have to use a timeout so that the component can be rendered first + // otherwise the 'mask' call errors out + setTimeout(function() { + statusgrid.unmask(); + }, 10); + me.reload(); + vm.set('loaded', true); + } + } + }, + labelMedia: function() { let me = this; Ext.create('PBS.TapeManagement.LabelMediaWindow', { @@ -84,18 +113,23 @@ Ext.define('PBS.TapeManagement.DriveStatus', { init: function(view) { let me = this; me.mon(me.lookup('statusgrid').getStore().rstore, 'load', 'onLoad'); + let tapeStore = Ext.ComponentQuery.query('navigationtree')[0].tapestore; + me.mon(tapeStore, 'load', 'onStateLoad'); + if (tapeStore.isLoaded()) { + me.onStateLoad(tapeStore); + } }, }, - listeners: { - activate: 'reload', - }, - tbar: [ { xtype: 'proxmoxButton', handler: 'reload', text: gettext('Reload'), + disabled: true, + bind: { + disabled: '{busy}', + }, }, '-', {