Author: damoxc
Revision: 5761
Log:
rewrite the plugins page using the new get_plugins method in the web
json api
update the grid when a Plugin{Dis|En}abledEvent occurs
Diff:
Modified: trunk/deluge/ui/web/js/Deluge.Preferences.Plugins.js
===================================================================
--- trunk/deluge/ui/web/js/Deluge.Preferences.Plugins.js 2009-09-16
09:39:30 UTC (rev 5760)
+++ trunk/deluge/ui/web/js/Deluge.Preferences.Plugins.js 2009-09-16
09:53:49 UTC (rev 5761)
@@ -1,6 +1,6 @@
/*
Script: Deluge.Preferences.Plugins.js
- The plugins preferences page.
+ The plugins preferences page.
Copyright:
(C) Damien Churchill 2009 <[email protected]>
@@ -20,15 +20,15 @@
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
- library.
- 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
- 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
- this exception statement from your version. If you delete this exception
- statement from all source files in the program, then also delete it here.
+ In addition, as a special exception, the copyright holders give
+ permission to link the code of portions of this program with the OpenSSL
+ library.
+ 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
+ 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
+ this exception statement from your version. If you delete this exception
+ statement from all source files in the program, then also delete it
here.
*/
Ext.namespace('Ext.deluge.preferences');
@@ -43,7 +43,7 @@
}, config);
Ext.deluge.preferences.Plugins.superclass.constructor.call(this, config);
},
-
+
pluginTemplate: new Ext.Template(
'<dl class="singleline">' +
'<dt>Author:</dt><dd>{author}</dd>' +
@@ -53,7 +53,7 @@
'<dt>Details:</dt><dd>{details}</dd>' +
'</dl>'
),
-
+
initComponent: function() {
Ext.deluge.preferences.Plugins.superclass.initComponent.call(this);
this.defaultValues = {
@@ -63,12 +63,12 @@
'details': ''
};
this.pluginTemplate.compile();
-
+
var checkboxRenderer = function(v, p, record){
p.css += ' x-grid3-check-col-td';
return '<div class="x-grid3-check-col'+(v?'-on':'')+'">
</div>';
}
-
+
this.grid = this.add({
xtype: 'grid',
region: 'center',
@@ -112,11 +112,6 @@
text: _('Install'),
handler: this.onInstallPlugin,
scope: this
- }, {
- cls: 'x-btn-text-icon',
- text: _('Rescan'),
- handler: this.onRescanPlugins,
- scope: this
}, '->', {
cls: 'x-btn-text-icon',
text: _('Find More'),
@@ -125,7 +120,7 @@
}]
})
});
-
+
var fieldset = this.add({
xtype: 'fieldset',
border: false,
@@ -141,25 +136,48 @@
style: 'margin-left: 10px'
}
});
-
+
this.on('show', this.onShow, this);
+ this.pluginInfo.on('render', this.onPluginInfoRender, this);
this.grid.on('cellclick', this.onCellClick, this);
Deluge.Preferences.on('show', this.onPreferencesShow, this);
+ Deluge.Events.on('PluginDisabledEvent', this.onPluginDisabled,
this);
+ Deluge.Events.on('PluginEnabledEvent', this.onPluginsEnabled,
this);
},
-
+
disablePlugin: function(plugin) {
Deluge.Client.core.disable_plugin(plugin);
},
-
+
enablePlugin: function(plugin) {
Deluge.Client.core.enable_plugin(plugin);
},
-
+
setInfo: function(plugin) {
+ if (!this.pluginInfo.rendered) return;
var values = plugin || this.defaultValues;
this.pluginInfo.body.dom.innerHTML =
this.pluginTemplate.apply(values);
},
+ updatePlugins: function() {
+ Deluge.Client.web.get_plugins({
+ success: this.onGotPlugins,
+ scope: this
+ });
+ },
+
+ updatePluginsGrid: function() {
+ var plugins = [];
+ Ext.each(this.availablePlugins, function(plugin) {
+ if (this.enabledPlugins.indexOf(plugin) > -1) {
+ plugins.push([true, plugin]);
+ } else {
+ plugins.push([false, plugin]);
+ }
+ }, this);
+ this.grid.getStore().loadData(plugins);
+ },
+
onCellClick: function(grid, rowIndex, colIndex, e) {
if (colIndex != 0) return;
var r = grid.getStore().getAt(rowIndex);
@@ -171,23 +189,18 @@
this.disablePlugin(r.get('plugin'));
}
},
-
+
onFindMorePlugins: function() {
window.open('http://dev.deluge-torrent.org/wiki/Plugins');
},
-
- onGotAvailablePlugins: function(plugins) {
- this.availablePlugins = plugins;
- Deluge.Client.core.get_enabled_plugins({
- success: this.onGotEnabledPlugins,
- scope: this
- });
+
+ onGotPlugins: function(plugins) {
+ this.enabledPlugins = plugins.enabled_plugins;
+ this.availablePlugins = plugins.available_plugins;
+ this.setInfo();
+ this.updatePluginsGrid();
},
-
- onGotEnabledPlugins: function(plugins) {
- this.enabledPlugins = plugins;
- },
-
+
onGotPluginInfo: function(info) {
var values = {
author: info['Author'],
@@ -199,33 +212,34 @@
this.setInfo(values);
delete info;
},
+
+ onPluginEnabled: function(pluginName) {
+ var index = this.grid.getStore().find('plugin', pluginName);
+ var plugin = this.grid.getStore().getAt(index);
+ plugin.set('enabled', true);
+ plugin.commit();
+ },
+ onPluginDisabled: function(pluginName) {
+ var index = this.grid.getStore().find('plugin', pluginName);
+ var plugin = this.grid.getStore().getAt(index);
+ plugin.set('enabled', false);
+ plugin.commit();
+ },
+
onPluginSelect: function(selmodel, rowIndex, r) {
Deluge.Client.web.get_plugin_info(r.get('plugin'), {
success: this.onGotPluginInfo,
scope: this
});
},
-
+
onPreferencesShow: function() {
- Deluge.Client.core.get_available_plugins({
- success: this.onGotAvailablePlugins,
- scope: this
- });
+ this.updatePlugins();
},
-
- onShow: function() {
- Ext.deluge.preferences.Plugins.superclass.onShow.call(this);
+
+ onPluginInfoRender: function(ct, position) {
this.setInfo();
- var plugins = [];
- Ext.each(this.availablePlugins, function(plugin) {
- if (this.enabledPlugins.indexOf(plugin) > -1) {
- plugins.push([true, plugin]);
- } else {
- plugins.push([false, plugin]);
- }
- }, this);
- this.grid.getStore().loadData(plugins);
}
});
Deluge.Preferences.addPage(new Ext.deluge.preferences.Plugins());
\ No newline at end of file
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"deluge-commit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/deluge-commit?hl=en
-~----------~----~----~----~------~----~------~--~---