0bb29d3556
copied from pve-manager, remove pve-manager specific code and rename 'pve' to 'proxmox'.
68 lines
1.3 KiB
JavaScript
68 lines
1.3 KiB
JavaScript
// Serialize load (avoid too many parallel connections)
|
|
Ext.define('Proxmox.data.UpdateQueue', {
|
|
singleton: true,
|
|
|
|
constructor : function(){
|
|
var me = this;
|
|
|
|
var queue = [];
|
|
var queue_idx = {};
|
|
|
|
var idle = true;
|
|
|
|
var start_update = function() {
|
|
if (!idle) {
|
|
return;
|
|
}
|
|
|
|
var storeid = queue.shift();
|
|
if (!storeid) {
|
|
return;
|
|
}
|
|
var info = queue_idx[storeid];
|
|
queue_idx[storeid] = null;
|
|
|
|
info.updatestart = new Date();
|
|
|
|
idle = false;
|
|
info.store.load({
|
|
callback: function(records, operation, success) {
|
|
idle = true;
|
|
if (info.callback) {
|
|
var runtime = (new Date()).getTime() - info.updatestart.getTime();
|
|
info.callback(runtime, success);
|
|
}
|
|
start_update();
|
|
}
|
|
});
|
|
};
|
|
|
|
Ext.apply(me, {
|
|
queue: function(store, cb) {
|
|
var storeid = store.storeid;
|
|
if (!storeid) {
|
|
throw "unable to queue store without storeid";
|
|
}
|
|
if (!queue_idx[storeid]) {
|
|
queue_idx[storeid] = {
|
|
store: store,
|
|
callback: cb
|
|
};
|
|
queue.push(storeid);
|
|
}
|
|
start_update();
|
|
},
|
|
unqueue: function(store) {
|
|
var storeid = store.storeid;
|
|
if (!storeid) {
|
|
throw "unabel to unqueue store without storeid";
|
|
}
|
|
if (queue_idx[storeid]) {
|
|
Ext.Array.remove(queue,storeid);
|
|
queue_idx[storeid] = null;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|