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 <d.csapak@proxmox.com>
This commit is contained in:
Dominik Csapak 2021-03-02 12:19:40 +01:00 committed by Dietmar Maurer
parent d810014eeb
commit 6f3714b9aa
1 changed files with 38 additions and 4 deletions

View File

@ -18,6 +18,8 @@ Ext.define('PBS.TapeManagement.DriveStatus', {
viewModel: { viewModel: {
data: { data: {
online: false, online: false,
busy: true,
loaded: false,
}, },
}, },
@ -38,6 +40,33 @@ Ext.define('PBS.TapeManagement.DriveStatus', {
vm.set('online', online); 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() { labelMedia: function() {
let me = this; let me = this;
Ext.create('PBS.TapeManagement.LabelMediaWindow', { Ext.create('PBS.TapeManagement.LabelMediaWindow', {
@ -84,18 +113,23 @@ Ext.define('PBS.TapeManagement.DriveStatus', {
init: function(view) { init: function(view) {
let me = this; let me = this;
me.mon(me.lookup('statusgrid').getStore().rstore, 'load', 'onLoad'); 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: [ tbar: [
{ {
xtype: 'proxmoxButton', xtype: 'proxmoxButton',
handler: 'reload', handler: 'reload',
text: gettext('Reload'), text: gettext('Reload'),
disabled: true,
bind: {
disabled: '{busy}',
},
}, },
'-', '-',
{ {