proxmox-widget-toolkit/data/UpdateStore.js
Dominik Csapak ff5351f775 remove updatequeue
since all modern browsers can properly handle multiple
xmlhttprequests, we do not need to serialize them ourselves, but
leave it to the browser

this fixes an issue wehre a canceled request of an updatestore
blocks all other updatestores until refresh

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2017-11-29 12:04:31 +01:00

77 lines
1.5 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 call yourself startUpdate() for the background load
* to begin
*/
Ext.define('Proxmox.data.UpdateStore', {
extend: 'Ext.data.Store',
alias: 'store.update',
isStopped: true,
autoStart: false,
destroy: function() {
var me = this;
me.stopUpdate();
me.callParent();
},
constructor: function(config) {
var me = this;
config = config || {};
if (!config.interval) {
config.interval = 3000;
}
if (!config.storeid) {
throw "no storeid specified";
}
var load_task = new Ext.util.DelayedTask();
var run_load_task = function() {
if (me.isStopped) {
return;
}
if (Proxmox.Utils.authOK()) {
var start = new Date();
me.load(function() {
var runtime = (new Date()) - start;
var interval = config.interval + runtime*2;
load_task.delay(interval, run_load_task);
});
} else {
load_task.delay(200, run_load_task);
}
};
Ext.apply(config, {
startUpdate: function() {
me.isStopped = false;
// run_load_task(); this makes problems with chrome
load_task.delay(1, run_load_task);
},
stopUpdate: function() {
me.isStopped = true;
load_task.cancel();
}
});
me.callParent([config]);
me.load_task = load_task;
if (me.autoStart) {
me.startUpdate();
}
}
});