move the stateful stuff to Deluge.js before any other js has executed
This commit is contained in:
parent
d075ac888e
commit
3f8abf1e34
|
@ -1,25 +1,25 @@
|
|||
/*
|
||||
Script: deluge-ui.js
|
||||
Script: Deluge.UI.js
|
||||
The core ui module that builds up the ui layout and controls the polling
|
||||
of the server.
|
||||
of the server.
|
||||
|
||||
Copyright:
|
||||
(C) Damien Churchill 2009 <damoxc@gmail.com>
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
(C) Damien Churchill 2009 <damoxc@gmail.com>
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, write to:
|
||||
The Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor
|
||||
Boston, MA 02110-1301, USA.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, write to:
|
||||
The Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor
|
||||
Boston, MA 02110-1301, USA.
|
||||
|
||||
In addition, as a special exception, the copyright holders give
|
||||
permission to link the code of portions of this program with the OpenSSL
|
||||
|
@ -40,163 +40,160 @@ Copyright:
|
|||
*/
|
||||
Deluge.UI = {
|
||||
|
||||
cookies: new Ext.state.CookieProvider(),
|
||||
|
||||
errorCount: 0,
|
||||
|
||||
/**
|
||||
* @description Create all the interface components, the json-rpc client
|
||||
* and set up various events that the UI will utilise.
|
||||
*/
|
||||
initialize: function() {
|
||||
Ext.state.Manager.setProvider(this.cookies);
|
||||
this.MainPanel = new Ext.Panel({
|
||||
id: 'mainPanel',
|
||||
iconCls: 'x-deluge-main-panel',
|
||||
title: 'Deluge',
|
||||
layout: 'border',
|
||||
tbar: Deluge.Toolbar,
|
||||
items: [
|
||||
Deluge.Sidebar,
|
||||
Deluge.Details,
|
||||
Deluge.Torrents
|
||||
],
|
||||
bbar: Deluge.Statusbar
|
||||
});
|
||||
errorCount: 0,
|
||||
|
||||
this.Viewport = new Ext.Viewport({
|
||||
layout: 'fit',
|
||||
items: [this.MainPanel]
|
||||
});
|
||||
|
||||
Deluge.Events.on("connect", this.onConnect, this);
|
||||
Deluge.Events.on("disconnect", this.onDisconnect, this);
|
||||
Deluge.Client = new Ext.ux.util.RpcClient({
|
||||
url: '/json'
|
||||
});
|
||||
/**
|
||||
* @description Create all the interface components, the json-rpc client
|
||||
* and set up various events that the UI will utilise.
|
||||
*/
|
||||
initialize: function() {
|
||||
this.MainPanel = new Ext.Panel({
|
||||
id: 'mainPanel',
|
||||
iconCls: 'x-deluge-main-panel',
|
||||
title: 'Deluge',
|
||||
layout: 'border',
|
||||
tbar: Deluge.Toolbar,
|
||||
items: [
|
||||
Deluge.Sidebar,
|
||||
Deluge.Details,
|
||||
Deluge.Torrents
|
||||
],
|
||||
bbar: Deluge.Statusbar
|
||||
});
|
||||
|
||||
for (var plugin in Deluge.Plugins) {
|
||||
plugin = Deluge.Plugins[plugin];
|
||||
plugin.enable();
|
||||
}
|
||||
|
||||
Deluge.Client.on('connected', function(e) {
|
||||
Deluge.Login.show();
|
||||
Deluge.Events.start();
|
||||
Deluge.Events.on('PluginEnabledEvent', this.onPluginEnabled, this);
|
||||
Deluge.Events.on('PluginDisabledEvent', this.onPluginDisabled, this);
|
||||
}, this, {single: true});
|
||||
|
||||
this.update = this.update.bind(this);
|
||||
},
|
||||
|
||||
update: function() {
|
||||
var filters = Deluge.Sidebar.getFilters();
|
||||
Deluge.Client.web.update_ui(Deluge.Keys.Grid, filters, {
|
||||
success: this.onUpdate,
|
||||
failure: this.onUpdateError,
|
||||
scope: this
|
||||
});
|
||||
Deluge.Details.update();
|
||||
Deluge.Client.web.connected({
|
||||
success: this.onConnectedCheck,
|
||||
scope: this
|
||||
});
|
||||
},
|
||||
|
||||
onConnectedCheck: function(connected) {
|
||||
if (!connected) {
|
||||
Deluge.Events.fire('disconnect');
|
||||
}
|
||||
},
|
||||
|
||||
onUpdateError: function(error) {
|
||||
if (this.errorCount == 2) {
|
||||
Ext.MessageBox.show({
|
||||
title: 'Lost Connection',
|
||||
msg: 'The connection to the webserver has been lost!',
|
||||
buttons: Ext.MessageBox.OK,
|
||||
icon: Ext.MessageBox.ERROR
|
||||
});
|
||||
}
|
||||
this.errorCount++;
|
||||
},
|
||||
|
||||
/**
|
||||
* @static
|
||||
* @private
|
||||
* Updates the various components in the interface.
|
||||
*/
|
||||
onUpdate: function(data) {
|
||||
Deluge.Torrents.update(data['torrents']);
|
||||
Deluge.Statusbar.update(data['stats']);
|
||||
Deluge.Sidebar.update(data['filters']);
|
||||
this.errorCount = 0;
|
||||
},
|
||||
|
||||
/**
|
||||
* @static
|
||||
* @private
|
||||
* Start the Deluge UI polling the server and update the interface.
|
||||
*/
|
||||
onConnect: function() {
|
||||
if (!this.running) {
|
||||
this.running = setInterval(this.update, 2000);
|
||||
this.update();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* @static
|
||||
* @private
|
||||
*/
|
||||
onDisconnect: function() {
|
||||
this.stop();
|
||||
},
|
||||
|
||||
onPluginEnabled: function(pluginName) {
|
||||
Deluge.Client.web.get_plugin_resources(pluginName, {
|
||||
success: this.onGotPluginResources,
|
||||
scope: this
|
||||
})
|
||||
},
|
||||
|
||||
onGotPluginResources: function(resources) {
|
||||
var scripts = (Deluge.debug) ? resources.debug_scripts : resources.scripts;
|
||||
Ext.each(scripts, function(script) {
|
||||
Ext.ux.JSLoader({
|
||||
url: script,
|
||||
onLoad: this.onPluginLoaded,
|
||||
pluginName: resources.name
|
||||
});
|
||||
}, this);
|
||||
},
|
||||
|
||||
onPluginDisabled: function(pluginName) {
|
||||
Deluge.Plugins[pluginName].disable();
|
||||
},
|
||||
|
||||
onPluginLoaded: function(options) {
|
||||
// This could happen if the plugin has multiple scripts
|
||||
if (!Deluge.Plugins[options.pluginName]) return;
|
||||
|
||||
// Enable the plugin
|
||||
Deluge.Plugins[options.pluginName].enable();
|
||||
},
|
||||
|
||||
/**
|
||||
* @static
|
||||
* Stop the Deluge UI polling the server and clear the interface.
|
||||
*/
|
||||
stop: function() {
|
||||
if (this.running) {
|
||||
clearInterval(this.running);
|
||||
this.running = false;
|
||||
Deluge.Torrents.getStore().loadData([]);
|
||||
}
|
||||
}
|
||||
this.Viewport = new Ext.Viewport({
|
||||
layout: 'fit',
|
||||
items: [this.MainPanel]
|
||||
});
|
||||
|
||||
Deluge.Events.on("connect", this.onConnect, this);
|
||||
Deluge.Events.on("disconnect", this.onDisconnect, this);
|
||||
Deluge.Client = new Ext.ux.util.RpcClient({
|
||||
url: '/json'
|
||||
});
|
||||
|
||||
for (var plugin in Deluge.Plugins) {
|
||||
plugin = Deluge.Plugins[plugin];
|
||||
plugin.enable();
|
||||
}
|
||||
|
||||
Deluge.Client.on('connected', function(e) {
|
||||
Deluge.Login.show();
|
||||
Deluge.Events.start();
|
||||
Deluge.Events.on('PluginEnabledEvent', this.onPluginEnabled, this);
|
||||
Deluge.Events.on('PluginDisabledEvent', this.onPluginDisabled, this);
|
||||
}, this, {single: true});
|
||||
|
||||
this.update = this.update.bind(this);
|
||||
},
|
||||
|
||||
update: function() {
|
||||
var filters = Deluge.Sidebar.getFilters();
|
||||
Deluge.Client.web.update_ui(Deluge.Keys.Grid, filters, {
|
||||
success: this.onUpdate,
|
||||
failure: this.onUpdateError,
|
||||
scope: this
|
||||
});
|
||||
Deluge.Details.update();
|
||||
Deluge.Client.web.connected({
|
||||
success: this.onConnectedCheck,
|
||||
scope: this
|
||||
});
|
||||
},
|
||||
|
||||
onConnectedCheck: function(connected) {
|
||||
if (!connected) {
|
||||
Deluge.Events.fire('disconnect');
|
||||
}
|
||||
},
|
||||
|
||||
onUpdateError: function(error) {
|
||||
if (this.errorCount == 2) {
|
||||
Ext.MessageBox.show({
|
||||
title: 'Lost Connection',
|
||||
msg: 'The connection to the webserver has been lost!',
|
||||
buttons: Ext.MessageBox.OK,
|
||||
icon: Ext.MessageBox.ERROR
|
||||
});
|
||||
}
|
||||
this.errorCount++;
|
||||
},
|
||||
|
||||
/**
|
||||
* @static
|
||||
* @private
|
||||
* Updates the various components in the interface.
|
||||
*/
|
||||
onUpdate: function(data) {
|
||||
Deluge.Torrents.update(data['torrents']);
|
||||
Deluge.Statusbar.update(data['stats']);
|
||||
Deluge.Sidebar.update(data['filters']);
|
||||
this.errorCount = 0;
|
||||
},
|
||||
|
||||
/**
|
||||
* @static
|
||||
* @private
|
||||
* Start the Deluge UI polling the server and update the interface.
|
||||
*/
|
||||
onConnect: function() {
|
||||
if (!this.running) {
|
||||
this.running = setInterval(this.update, 2000);
|
||||
this.update();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* @static
|
||||
* @private
|
||||
*/
|
||||
onDisconnect: function() {
|
||||
this.stop();
|
||||
},
|
||||
|
||||
onPluginEnabled: function(pluginName) {
|
||||
Deluge.Client.web.get_plugin_resources(pluginName, {
|
||||
success: this.onGotPluginResources,
|
||||
scope: this
|
||||
})
|
||||
},
|
||||
|
||||
onGotPluginResources: function(resources) {
|
||||
var scripts = (Deluge.debug) ? resources.debug_scripts : resources.scripts;
|
||||
Ext.each(scripts, function(script) {
|
||||
Ext.ux.JSLoader({
|
||||
url: script,
|
||||
onLoad: this.onPluginLoaded,
|
||||
pluginName: resources.name
|
||||
});
|
||||
}, this);
|
||||
},
|
||||
|
||||
onPluginDisabled: function(pluginName) {
|
||||
Deluge.Plugins[pluginName].disable();
|
||||
},
|
||||
|
||||
onPluginLoaded: function(options) {
|
||||
// This could happen if the plugin has multiple scripts
|
||||
if (!Deluge.Plugins[options.pluginName]) return;
|
||||
|
||||
// Enable the plugin
|
||||
Deluge.Plugins[options.pluginName].enable();
|
||||
},
|
||||
|
||||
/**
|
||||
* @static
|
||||
* Stop the Deluge UI polling the server and clear the interface.
|
||||
*/
|
||||
stop: function() {
|
||||
if (this.running) {
|
||||
clearInterval(this.running);
|
||||
this.running = false;
|
||||
Deluge.Torrents.getStore().loadData([]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ext.onReady(function(e) {
|
||||
Deluge.UI.initialize();
|
||||
Deluge.UI.initialize();
|
||||
});
|
|
@ -31,8 +31,12 @@ Copyright:
|
|||
statement from all source files in the program, then also delete it here.
|
||||
*/
|
||||
|
||||
// Create the namespace Ext.deluge
|
||||
Ext.namespace('Ext.deluge');
|
||||
|
||||
// Setup the state manager
|
||||
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
|
||||
|
||||
(function() {
|
||||
/* Add some helper functions to Ext */
|
||||
Ext.apply(Function.prototype, {
|
||||
|
|
Loading…
Reference in New Issue