mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-02 22:48:40 +00:00
remove the connected call upon an update to reduce the number of ajax calls
This commit is contained in:
parent
3179ff2060
commit
d411f90a67
2 changed files with 158 additions and 166 deletions
|
@ -1,35 +1,35 @@
|
||||||
/*
|
/*
|
||||||
Script: Deluge.UI.js
|
Script: Deluge.UI.js
|
||||||
The core ui module that builds up the ui layout and controls the polling
|
The core ui module that builds up the ui layout and controls the polling
|
||||||
of the server.
|
of the server.
|
||||||
|
|
||||||
Copyright:
|
Copyright:
|
||||||
(C) Damien Churchill 2009 <damoxc@gmail.com>
|
(C) Damien Churchill 2009 <damoxc@gmail.com>
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 3, or (at your option)
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, write to:
|
along with this program. If not, write to:
|
||||||
The Free Software Foundation, Inc.,
|
The Free Software Foundation, Inc.,
|
||||||
51 Franklin Street, Fifth Floor
|
51 Franklin Street, Fifth Floor
|
||||||
Boston, MA 02110-1301, USA.
|
Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
In addition, as a special exception, the copyright holders give
|
In addition, as a special exception, the copyright holders give
|
||||||
permission to link the code of portions of this program with the OpenSSL
|
permission to link the code of portions of this program with the OpenSSL
|
||||||
library.
|
library.
|
||||||
You must obey the GNU General Public License in all respects for all of
|
You must obey the GNU General Public License in all respects for all of
|
||||||
the code used other than OpenSSL. If you modify file(s) with this
|
the code used other than OpenSSL. If you modify file(s) with this
|
||||||
exception, you may extend this exception to your version of the file(s),
|
exception, you may extend this exception to your version of the file(s),
|
||||||
but you are not obligated to do so. If you do not wish to do so, delete
|
but you are not obligated to do so. If you do not wish to do so, delete
|
||||||
this exception statement from your version. If you delete this exception
|
this exception statement from your version. If you delete this exception
|
||||||
statement from all source files in the program, then also delete it here.
|
statement from all source files in the program, then also delete it here.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -40,160 +40,151 @@ Copyright:
|
||||||
*/
|
*/
|
||||||
Deluge.UI = {
|
Deluge.UI = {
|
||||||
|
|
||||||
errorCount: 0,
|
errorCount: 0,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description Create all the interface components, the json-rpc client
|
* @description Create all the interface components, the json-rpc client
|
||||||
* and set up various events that the UI will utilise.
|
* and set up various events that the UI will utilise.
|
||||||
*/
|
*/
|
||||||
initialize: function() {
|
initialize: function() {
|
||||||
this.MainPanel = new Ext.Panel({
|
this.MainPanel = new Ext.Panel({
|
||||||
id: 'mainPanel',
|
id: 'mainPanel',
|
||||||
iconCls: 'x-deluge-main-panel',
|
iconCls: 'x-deluge-main-panel',
|
||||||
title: 'Deluge',
|
title: 'Deluge',
|
||||||
layout: 'border',
|
layout: 'border',
|
||||||
tbar: Deluge.Toolbar,
|
tbar: Deluge.Toolbar,
|
||||||
items: [
|
items: [
|
||||||
Deluge.Sidebar,
|
Deluge.Sidebar,
|
||||||
Deluge.Details,
|
Deluge.Details,
|
||||||
Deluge.Torrents
|
Deluge.Torrents
|
||||||
],
|
],
|
||||||
bbar: Deluge.Statusbar
|
bbar: Deluge.Statusbar
|
||||||
});
|
});
|
||||||
|
|
||||||
this.Viewport = new Ext.Viewport({
|
this.Viewport = new Ext.Viewport({
|
||||||
layout: 'fit',
|
layout: 'fit',
|
||||||
items: [this.MainPanel]
|
items: [this.MainPanel]
|
||||||
});
|
});
|
||||||
|
|
||||||
Deluge.Events.on("connect", this.onConnect, this);
|
Deluge.Events.on("connect", this.onConnect, this);
|
||||||
Deluge.Events.on("disconnect", this.onDisconnect, this);
|
Deluge.Events.on("disconnect", this.onDisconnect, this);
|
||||||
Deluge.Client = new Ext.ux.util.RpcClient({
|
Deluge.Client = new Ext.ux.util.RpcClient({
|
||||||
url: '/json'
|
url: '/json'
|
||||||
});
|
});
|
||||||
|
|
||||||
for (var plugin in Deluge.Plugins) {
|
for (var plugin in Deluge.Plugins) {
|
||||||
plugin = Deluge.Plugins[plugin];
|
plugin = Deluge.Plugins[plugin];
|
||||||
plugin.enable();
|
plugin.enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
Deluge.Client.on('connected', function(e) {
|
Deluge.Client.on('connected', function(e) {
|
||||||
Deluge.Login.show();
|
Deluge.Login.show();
|
||||||
Deluge.Events.start();
|
Deluge.Events.start();
|
||||||
Deluge.Events.on('PluginEnabledEvent', this.onPluginEnabled, this);
|
Deluge.Events.on('PluginEnabledEvent', this.onPluginEnabled, this);
|
||||||
Deluge.Events.on('PluginDisabledEvent', this.onPluginDisabled, this);
|
Deluge.Events.on('PluginDisabledEvent', this.onPluginDisabled, this);
|
||||||
}, this, {single: true});
|
}, this, {single: true});
|
||||||
|
|
||||||
this.update = this.update.bind(this);
|
this.update = this.update.bind(this);
|
||||||
},
|
},
|
||||||
|
|
||||||
update: function() {
|
update: function() {
|
||||||
var filters = Deluge.Sidebar.getFilters();
|
var filters = Deluge.Sidebar.getFilters();
|
||||||
Deluge.Client.web.update_ui(Deluge.Keys.Grid, filters, {
|
Deluge.Client.web.update_ui(Deluge.Keys.Grid, filters, {
|
||||||
success: this.onUpdate,
|
success: this.onUpdate,
|
||||||
failure: this.onUpdateError,
|
failure: this.onUpdateError,
|
||||||
scope: this
|
scope: this
|
||||||
});
|
});
|
||||||
Deluge.Details.update();
|
Deluge.Details.update();
|
||||||
Deluge.Client.web.connected({
|
},
|
||||||
success: this.onConnectedCheck,
|
|
||||||
scope: this
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
onConnectedCheck: function(connected) {
|
onUpdateError: function(error) {
|
||||||
if (!connected) {
|
if (this.errorCount == 2) {
|
||||||
Deluge.Events.fire('disconnect');
|
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++;
|
||||||
|
},
|
||||||
|
|
||||||
onUpdateError: function(error) {
|
/**
|
||||||
if (this.errorCount == 2) {
|
* @static
|
||||||
Ext.MessageBox.show({
|
* @private
|
||||||
title: 'Lost Connection',
|
* Updates the various components in the interface.
|
||||||
msg: 'The connection to the webserver has been lost!',
|
*/
|
||||||
buttons: Ext.MessageBox.OK,
|
onUpdate: function(data) {
|
||||||
icon: Ext.MessageBox.ERROR
|
if (!data['connected']) Deluge.Events.fire('disconnect');
|
||||||
});
|
Deluge.Torrents.update(data['torrents']);
|
||||||
}
|
Deluge.Statusbar.update(data['stats']);
|
||||||
this.errorCount++;
|
Deluge.Sidebar.update(data['filters']);
|
||||||
},
|
this.errorCount = 0;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @static
|
* @static
|
||||||
* @private
|
* @private
|
||||||
* Updates the various components in the interface.
|
* Start the Deluge UI polling the server and update the interface.
|
||||||
*/
|
*/
|
||||||
onUpdate: function(data) {
|
onConnect: function() {
|
||||||
Deluge.Torrents.update(data['torrents']);
|
if (!this.running) {
|
||||||
Deluge.Statusbar.update(data['stats']);
|
this.running = setInterval(this.update, 2000);
|
||||||
Deluge.Sidebar.update(data['filters']);
|
this.update();
|
||||||
this.errorCount = 0;
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @static
|
* @static
|
||||||
* @private
|
* @private
|
||||||
* Start the Deluge UI polling the server and update the interface.
|
*/
|
||||||
*/
|
onDisconnect: function() {
|
||||||
onConnect: function() {
|
this.stop();
|
||||||
if (!this.running) {
|
},
|
||||||
this.running = setInterval(this.update, 2000);
|
|
||||||
this.update();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
onPluginEnabled: function(pluginName) {
|
||||||
* @static
|
Deluge.Client.web.get_plugin_resources(pluginName, {
|
||||||
* @private
|
success: this.onGotPluginResources,
|
||||||
*/
|
scope: this
|
||||||
onDisconnect: function() {
|
})
|
||||||
this.stop();
|
},
|
||||||
},
|
|
||||||
|
|
||||||
onPluginEnabled: function(pluginName) {
|
onGotPluginResources: function(resources) {
|
||||||
Deluge.Client.web.get_plugin_resources(pluginName, {
|
var scripts = (Deluge.debug) ? resources.debug_scripts : resources.scripts;
|
||||||
success: this.onGotPluginResources,
|
Ext.each(scripts, function(script) {
|
||||||
scope: this
|
Ext.ux.JSLoader({
|
||||||
})
|
url: script,
|
||||||
},
|
onLoad: this.onPluginLoaded,
|
||||||
|
pluginName: resources.name
|
||||||
|
});
|
||||||
|
}, this);
|
||||||
|
},
|
||||||
|
|
||||||
onGotPluginResources: function(resources) {
|
onPluginDisabled: function(pluginName) {
|
||||||
var scripts = (Deluge.debug) ? resources.debug_scripts : resources.scripts;
|
Deluge.Plugins[pluginName].disable();
|
||||||
Ext.each(scripts, function(script) {
|
},
|
||||||
Ext.ux.JSLoader({
|
|
||||||
url: script,
|
|
||||||
onLoad: this.onPluginLoaded,
|
|
||||||
pluginName: resources.name
|
|
||||||
});
|
|
||||||
}, this);
|
|
||||||
},
|
|
||||||
|
|
||||||
onPluginDisabled: function(pluginName) {
|
onPluginLoaded: function(options) {
|
||||||
Deluge.Plugins[pluginName].disable();
|
// This could happen if the plugin has multiple scripts
|
||||||
},
|
if (!Deluge.Plugins[options.pluginName]) return;
|
||||||
|
|
||||||
onPluginLoaded: function(options) {
|
// Enable the plugin
|
||||||
// This could happen if the plugin has multiple scripts
|
Deluge.Plugins[options.pluginName].enable();
|
||||||
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() {
|
||||||
* @static
|
if (this.running) {
|
||||||
* Stop the Deluge UI polling the server and clear the interface.
|
clearInterval(this.running);
|
||||||
*/
|
this.running = false;
|
||||||
stop: function() {
|
Deluge.Torrents.getStore().removeAll();
|
||||||
if (this.running) {
|
}
|
||||||
clearInterval(this.running);
|
}
|
||||||
this.running = false;
|
|
||||||
Deluge.Torrents.getStore().loadData([]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ext.onReady(function(e) {
|
Ext.onReady(function(e) {
|
||||||
Deluge.UI.initialize();
|
Deluge.UI.initialize();
|
||||||
});
|
});
|
||||||
|
|
|
@ -457,6 +457,7 @@ class WebApi(JSONComponent):
|
||||||
"""
|
"""
|
||||||
d = Deferred()
|
d = Deferred()
|
||||||
ui_info = {
|
ui_info = {
|
||||||
|
"connected": client.connected(),
|
||||||
"torrents": None,
|
"torrents": None,
|
||||||
"filters": None,
|
"filters": None,
|
||||||
"stats": {
|
"stats": {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue