mirror of
				https://git.proxmox.com/git/proxmox-widget-toolkit
				synced 2025-10-31 18:20:35 +00:00 
			
		
		
		
	 d4c342fb73
			
		
	
	
		d4c342fb73
		
	
	
	
	
		
			
			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>
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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();
 | |
| 	}
 | |
|     }
 | |
| });
 |