proxmox-widget-toolkit/data/UpdateStore.js
Dominik Csapak d4c342fb73 UpdateStore: fix 'undefined' interval
in some cases, we provide a config with interval set to 'undefined',
which gets happily applied to the config, but gets interpreted as '0'
when actually starting the task, resulting in constant api requests

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2020-04-16 17:59:30 +02:00

80 lines
1.6 KiB
JavaScript

/*
* Extends the Ext.data.Store type with startUpdate() and stopUpdate() methods
* to refresh the store data in the background.
* Components using this store directly will flicker due to the redisplay of
* the element ater 'config.interval' ms.
*
* Note that you have to set 'autoStart' or call startUpdate() once yourself
* for the background load to begin.
*/
Ext.define('Proxmox.data.UpdateStore', {
extend: 'Ext.data.Store',
alias: 'store.update',
config: {
interval: 3000,
isStopped: true,
autoStart: false,
},
destroy: function() {
let me = this;
me.stopUpdate();
me.callParent();
},
constructor: function(config) {
let me = this;
config = config || {};
if (config.interval === undefined) {
delete config.interval;
}
if (!config.storeid) {
throw "no storeid specified";
}
let load_task = new Ext.util.DelayedTask();
let run_load_task = function() {
if (me.getIsStopped()) {
return;
}
if (Proxmox.Utils.authOK()) {
let start = new Date();
me.load(function() {
let runtime = (new Date()) - start;
let interval = me.getInterval() + runtime*2;
load_task.delay(interval, run_load_task);
});
} else {
load_task.delay(200, run_load_task);
}
};
Ext.apply(config, {
startUpdate: function() {
me.setIsStopped(false);
// run_load_task(); this makes problems with chrome
load_task.delay(1, run_load_task);
},
stopUpdate: function() {
me.setIsStopped(true);
load_task.cancel();
}
});
me.callParent([config]);
me.load_task = load_task;
if (me.getAutoStart()) {
me.startUpdate();
}
}
});