From 2e2851dc13d73352530dd4495c7e05603b2e520d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 23:38:38 +0200 Subject: Adding upstream version 2.1.2~dev0+20240219. Signed-off-by: Daniel Baumann --- deluge/ui/web/js/deluge-all/EventsManager.js | 118 +++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 deluge/ui/web/js/deluge-all/EventsManager.js (limited to 'deluge/ui/web/js/deluge-all/EventsManager.js') diff --git a/deluge/ui/web/js/deluge-all/EventsManager.js b/deluge/ui/web/js/deluge-all/EventsManager.js new file mode 100644 index 0000000..89d8980 --- /dev/null +++ b/deluge/ui/web/js/deluge-all/EventsManager.js @@ -0,0 +1,118 @@ +/** + * Deluge.EventsManager.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with + * the additional special exception to link portions of this program with the OpenSSL library. + * See LICENSE for more details. + */ + +/** + * @class Deluge.EventsManager + * @extends Ext.util.Observable + *

Deluge.EventsManager is instantated as deluge.events and can be used by components of the UI to fire global events

+ * Class for holding global events that occur within the UI. + */ +Deluge.EventsManager = Ext.extend(Ext.util.Observable, { + constructor: function () { + this.toRegister = []; + this.on('login', this.onLogin, this); + Deluge.EventsManager.superclass.constructor.call(this); + }, + + /** + * Append an event handler to this object. + */ + addListener: function (eventName, fn, scope, o) { + this.addEvents(eventName); + if (/[A-Z]/.test(eventName.substring(0, 1))) { + if (!deluge.client) { + this.toRegister.push(eventName); + } else { + deluge.client.web.register_event_listener(eventName); + } + } + Deluge.EventsManager.superclass.addListener.call( + this, + eventName, + fn, + scope, + o + ); + }, + + getEvents: function () { + deluge.client.web.get_events({ + success: this.onGetEventsSuccess, + failure: this.onGetEventsFailure, + scope: this, + }); + }, + + /** + * Starts the EventsManagerManager checking for events. + */ + start: function () { + Ext.each(this.toRegister, function (eventName) { + deluge.client.web.register_event_listener(eventName); + }); + this.running = true; + this.errorCount = 0; + this.getEvents(); + }, + + /** + * Stops the EventsManagerManager checking for events. + */ + stop: function () { + this.running = false; + }, + + // private + onLogin: function () { + this.start(); + }, + + onGetEventsSuccess: function (events) { + if (!this.running) return; + if (events) { + Ext.each( + events, + function (event) { + var name = event[0], + args = event[1]; + args.splice(0, 0, name); + this.fireEvent.apply(this, args); + }, + this + ); + } + this.getEvents(); + }, + + // private + onGetEventsFailure: function (result, error) { + // the request timed out or we had a communication failure + if (!this.running) return; + if (!error.isTimeout && this.errorCount++ >= 3) { + this.stop(); + return; + } + this.getEvents(); + }, +}); + +/** + * Appends an event handler to this object (shorthand for {@link #addListener}) + * @method + */ +Deluge.EventsManager.prototype.on = Deluge.EventsManager.prototype.addListener; + +/** + * Fires the specified event with the passed parameters (minus the + * event name). + * @method + */ +Deluge.EventsManager.prototype.fire = Deluge.EventsManager.prototype.fireEvent; +deluge.events = new Deluge.EventsManager(); -- cgit v1.2.3