You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.1 KiB
89 lines
2.1 KiB
|
|
/** |
|
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> |
|
* This file is licensed under the Affero General Public License version 3 or later. |
|
* See the COPYING-README file. |
|
*/ |
|
|
|
OCA = OCA || {}; |
|
|
|
(function() { |
|
/** |
|
* @classdesc only run detector is allowed to run at a time. Basically |
|
* because we cannot have parallel LDAP connections per session. This |
|
* queue is takes care of running all the detectors one after the other. |
|
* |
|
* @constructor |
|
*/ |
|
var WizardDetectorQueue = OCA.LDAP.Wizard.WizardObject.subClass({ |
|
/** |
|
* initializes the instance. Always call it after creating the instance. |
|
*/ |
|
init: function() { |
|
this.queue = []; |
|
this.isRunning = false; |
|
}, |
|
|
|
/** |
|
* empties the queue and cancels a possibly running request |
|
*/ |
|
reset: function() { |
|
this.queue = []; |
|
if(!_.isUndefined(this.runningRequest)) { |
|
this.runningRequest.abort(); |
|
delete this.runningRequest; |
|
} |
|
this.isRunning = false; |
|
}, |
|
|
|
/** |
|
* a parameter-free callback that eventually executes the run method of |
|
* the detector. |
|
* |
|
* @callback detectorCallBack |
|
* @see OCA.LDAP.Wizard.ConfigModel._processSetResult |
|
*/ |
|
|
|
/** |
|
* adds a detector to the queue and attempts to trigger to run the |
|
* next job, because it might be the first. |
|
* |
|
* @param {detectorCallBack} callback |
|
*/ |
|
add: function(callback) { |
|
this.queue.push(callback); |
|
this.next(); |
|
}, |
|
|
|
/** |
|
* Executes the next detector if none is running. This method is also |
|
* automatically invoked after a detector finished. |
|
*/ |
|
next: function() { |
|
if(this.isRunning === true || this.queue.length === 0) { |
|
return; |
|
} |
|
|
|
this.isRunning = true; |
|
var callback = this.queue.shift(); |
|
var request = callback(); |
|
|
|
// we receive either false or a jqXHR object |
|
// false in case the detector decided against executing |
|
if(request === false) { |
|
this.isRunning = false; |
|
this.next(); |
|
return; |
|
} |
|
this.runningRequest = request; |
|
|
|
var detectorQueue = this; |
|
$.when(request).then(function() { |
|
detectorQueue.isRunning = false; |
|
detectorQueue.next(); |
|
}); |
|
} |
|
}); |
|
|
|
OCA.LDAP.Wizard.WizardDetectorQueue = WizardDetectorQueue; |
|
})();
|
|
|