mirror of
https://github.com/logos-storage/deluge.git
synced 2026-01-07 23:53:12 +00:00
* Fixed black hook requiring Py3.6 to installed locally. Will now assume Py3.6+ in installed. * Added isort traceback in pre-commit flake8 hook fails * Updated versions of Black, Prettier and isort * Keep Flake8 at 3.7.9 due to E402 issue: https://gitlab.com/pycqa/flake8/-/issues/638 * New pyproject config for isort v5 with fixes for Python 2 imports. * Fixed travis config to run Python 3.6 for lint run. Replaced the virtualenv with_system_site_packages config with Travis specific Python config value so lint run doesn't attempt to append with_system_site_packages to Python 3.6 command.
301 lines
8.6 KiB
JavaScript
301 lines
8.6 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);
|