Calum Lind 535b13b5f1 [Plugins] Convert plugins to deluge_ module prefix convention
This commit reverts namespace for the plugins and uses a module prefix
"deluge_" in it's place. The distribution package name remains the same
for now but will also be considered to use a prefix to help find the
third-party plugins e.g. Deluge-{Plugin} and the pluginmanager will
strip the prefix for displaying.

The change is a result of problems trying to package Deluge with
pyinstaller and the pkg_resources namespaces is not compatible.
Testing alternatives to using the pkgutil or PEP420 (native) namespaces
did not yield any joy either as importing eggs with namespaces does not
work. [1]

At this point importable eggs are considered deprecated but there is no
viable alternative yet. [2]

[1] https://github.com/pypa/packaging-problems/issues/212
[2] https://github.com/pypa/packaging-problems/issues/244
2019-05-15 19:20:08 +01:00

313 lines
8.8 KiB
JavaScript

/**
* execute.js
* The client-side javascript code for the Execute plugin.
*
* Copyright (C) Damien Churchill 2010 <damoxc@gmail.com>
*
* 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.
*
*/
Ext.ns('Deluge.ux');
Deluge.ux.ExecuteWindowBase = Ext.extend(Ext.Window, {
layout: 'fit',
width: 400,
height: 130,
closeAction: 'hide',
initComponent: function() {
Deluge.ux.ExecuteWindowBase.superclass.initComponent.call(this);
this.addButton(_('Cancel'), this.onCancelClick, this);
this.form = this.add({
xtype: 'form',
baseCls: 'x-plain',
bodyStyle: 'padding: 5px',
items: [
{
xtype: 'combo',
width: 270,
fieldLabel: _('Event'),
store: new Ext.data.ArrayStore({
fields: ['id', 'text'],
data: [
['complete', _('Torrent Complete')],
['added', _('Torrent Added')],
['removed', _('Torrent Removed')],
],
}),
name: 'event',
mode: 'local',
editable: false,
triggerAction: 'all',
valueField: 'id',
displayField: 'text',
},
{
xtype: 'textfield',
fieldLabel: _('Command'),
name: 'command',
width: 270,
},
],
});
},
onCancelClick: function() {
this.hide();
},
});
Deluge.ux.EditExecuteCommandWindow = Ext.extend(Deluge.ux.ExecuteWindowBase, {
title: _('Edit Command'),
initComponent: function() {
Deluge.ux.EditExecuteCommandWindow.superclass.initComponent.call(this);
this.addButton(_('Save'), this.onSaveClick, this);
this.addEvents({
commandedit: true,
});
},
show: function(command) {
Deluge.ux.EditExecuteCommandWindow.superclass.show.call(this);
this.command = command;
this.form.getForm().setValues({
event: command.get('event'),
command: command.get('name'),
});
},
onSaveClick: function() {
var values = this.form.getForm().getFieldValues();
deluge.client.execute.save_command(
this.command.id,
values.event,
values.command,
{
success: function() {
this.fireEvent(
'commandedit',
this,
values.event,
values.command
);
},
scope: this,
}
);
this.hide();
},
});
Deluge.ux.AddExecuteCommandWindow = Ext.extend(Deluge.ux.ExecuteWindowBase, {
title: _('Add Command'),
initComponent: function() {
Deluge.ux.AddExecuteCommandWindow.superclass.initComponent.call(this);
this.addButton(_('Add'), this.onAddClick, this);
this.addEvents({
commandadd: true,
});
},
onAddClick: function() {
var values = this.form.getForm().getFieldValues();
deluge.client.execute.add_command(values.event, values.command, {
success: function() {
this.fireEvent(
'commandadd',
this,
values.event,
values.command
);
},
scope: this,
});
this.hide();
},
});
Ext.ns('Deluge.ux.preferences');
/**
* @class Deluge.ux.preferences.ExecutePage
* @extends Ext.Panel
*/
Deluge.ux.preferences.ExecutePage = Ext.extend(Ext.Panel, {
title: _('Execute'),
header: false,
layout: 'fit',
border: false,
initComponent: function() {
Deluge.ux.preferences.ExecutePage.superclass.initComponent.call(this);
var event_map = (this.event_map = {
complete: _('Torrent Complete'),
added: _('Torrent Added'),
removed: _('Torrent Removed'),
});
this.list = new Ext.list.ListView({
store: new Ext.data.SimpleStore({
fields: [
{ name: 'event', mapping: 1 },
{ name: 'name', mapping: 2 },
],
id: 0,
}),
columns: [
{
width: 0.3,
header: _('Event'),
sortable: true,
dataIndex: 'event',
tpl: new Ext.XTemplate('{[this.getEvent(values.event)]}', {
getEvent: function(e) {
return event_map[e] ? event_map[e] : e;
},
}),
},
{
id: 'name',
header: _('Command'),
sortable: true,
dataIndex: 'name',
},
],
singleSelect: true,
autoExpandColumn: 'name',
});
this.list.on('selectionchange', this.onSelectionChange, this);
this.panel = this.add({
items: [this.list],
bbar: {
items: [
{
text: _('Add'),
iconCls: 'icon-add',
handler: this.onAddClick,
scope: this,
},
{
text: _('Edit'),
iconCls: 'icon-edit',
handler: this.onEditClick,
scope: this,
disabled: true,
},
'->',
{
text: _('Remove'),
iconCls: 'icon-remove',
handler: this.onRemoveClick,
scope: this,
disabled: true,
},
],
},
});
this.on('show', this.onPreferencesShow, this);
},
updateCommands: function() {
deluge.client.execute.get_commands({
success: function(commands) {
this.list.getStore().loadData(commands);
},
scope: this,
});
},
onAddClick: function() {
if (!this.addWin) {
this.addWin = new Deluge.ux.AddExecuteCommandWindow();
this.addWin.on(
'commandadd',
function() {
this.updateCommands();
},
this
);
}
this.addWin.show();
},
onCommandAdded: function(win, evt, cmd) {
var record = new this.list.getStore().recordType({
event: evt,
command: cmd,
});
},
onEditClick: function() {
if (!this.editWin) {
this.editWin = new Deluge.ux.EditExecuteCommandWindow();
this.editWin.on(
'commandedit',
function() {
this.updateCommands();
},
this
);
}
this.editWin.show(this.list.getSelectedRecords()[0]);
},
onPreferencesShow: function() {
this.updateCommands();
},
onRemoveClick: function() {
var record = this.list.getSelectedRecords()[0];
deluge.client.execute.remove_command(record.id, {
success: function() {
this.updateCommands();
},
scope: this,
});
},
onSelectionChange: function(dv, selections) {
if (selections.length) {
this.panel
.getBottomToolbar()
.items.get(1)
.enable();
this.panel
.getBottomToolbar()
.items.get(3)
.enable();
} else {
this.panel
.getBottomToolbar()
.items.get(1)
.disable();
this.panel
.getBottomToolbar()
.items.get(3)
.disable();
}
},
});
Deluge.plugins.ExecutePlugin = Ext.extend(Deluge.Plugin, {
name: 'Execute',
onDisable: function() {
deluge.preferences.removePage(this.prefsPage);
},
onEnable: function() {
this.prefsPage = deluge.preferences.addPage(
new Deluge.ux.preferences.ExecutePage()
);
},
});
Deluge.registerPlugin('Execute', Deluge.plugins.ExecutePlugin);