* 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.
228 lines
7.3 KiB
JavaScript
228 lines
7.3 KiB
JavaScript
/**
|
|
* Script: autoadd.js
|
|
* The client-side javascript code for the AutoAdd plugin.
|
|
*
|
|
* Copyright (C) 2009 GazpachoKing <chase.sterling@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.AutoAdd');
|
|
Deluge.ux.AutoAdd.onClickFunctions = {};
|
|
|
|
Ext.ns('Deluge.ux.preferences');
|
|
|
|
/**
|
|
* @class Deluge.ux.preferences.AutoAddPage
|
|
* @extends Ext.Panel
|
|
*/
|
|
Deluge.ux.preferences.AutoAddPage = Ext.extend(Ext.Panel, {
|
|
title: _('AutoAdd'),
|
|
header: false,
|
|
layout: 'fit',
|
|
border: false,
|
|
watchdirs: {},
|
|
|
|
initComponent: function () {
|
|
Deluge.ux.preferences.AutoAddPage.superclass.initComponent.call(this);
|
|
|
|
var autoAdd = this;
|
|
|
|
this.list = new Ext.list.ListView({
|
|
store: new Ext.data.JsonStore({
|
|
fields: ['id', 'enabled', 'owner', 'path'],
|
|
}),
|
|
columns: [
|
|
{
|
|
id: 'enabled',
|
|
header: _('Active'),
|
|
sortable: true,
|
|
dataIndex: 'enabled',
|
|
tpl: new Ext.XTemplate('{enabled:this.getCheckbox}', {
|
|
getCheckbox: function (checked, selected) {
|
|
Deluge.ux.AutoAdd.onClickFunctions[
|
|
selected.id
|
|
] = function () {
|
|
if (selected.enabled) {
|
|
deluge.client.autoadd.disable_watchdir(
|
|
selected.id
|
|
);
|
|
checked = false;
|
|
} else {
|
|
deluge.client.autoadd.enable_watchdir(
|
|
selected.id
|
|
);
|
|
checked = true;
|
|
}
|
|
autoAdd.updateWatchDirs();
|
|
};
|
|
return (
|
|
'<input id="enabled-' +
|
|
selected.id +
|
|
'" type="checkbox"' +
|
|
(checked ? ' checked' : '') +
|
|
' onclick="Deluge.ux.AutoAdd.onClickFunctions[' +
|
|
selected.id +
|
|
']()" />'
|
|
);
|
|
},
|
|
}),
|
|
width: 0.15,
|
|
},
|
|
{
|
|
id: 'owner',
|
|
header: _('Owner'),
|
|
sortable: true,
|
|
dataIndex: 'owner',
|
|
width: 0.2,
|
|
},
|
|
{
|
|
id: 'path',
|
|
header: _('Path'),
|
|
sortable: true,
|
|
dataIndex: 'path',
|
|
},
|
|
],
|
|
singleSelect: true,
|
|
autoExpandColumn: 'path',
|
|
});
|
|
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);
|
|
},
|
|
|
|
updateWatchDirs: function () {
|
|
deluge.client.autoadd.get_watchdirs({
|
|
success: function (watchdirs) {
|
|
this.watchdirs = watchdirs;
|
|
var watchdirsArray = [];
|
|
for (var id in watchdirs) {
|
|
if (watchdirs.hasOwnProperty(id)) {
|
|
var watchdir = {};
|
|
watchdir['id'] = id;
|
|
watchdir['enabled'] = watchdirs[id].enabled;
|
|
watchdir['owner'] =
|
|
watchdirs[id].owner || 'localclient';
|
|
watchdir['path'] = watchdirs[id].path;
|
|
|
|
watchdirsArray.push(watchdir);
|
|
}
|
|
}
|
|
this.list.getStore().loadData(watchdirsArray);
|
|
},
|
|
scope: this,
|
|
});
|
|
},
|
|
|
|
onAddClick: function () {
|
|
if (!this.addWin) {
|
|
this.addWin = new Deluge.ux.AutoAdd.AddAutoAddCommandWindow();
|
|
this.addWin.on(
|
|
'watchdiradd',
|
|
function () {
|
|
this.updateWatchDirs();
|
|
},
|
|
this
|
|
);
|
|
}
|
|
this.addWin.show();
|
|
},
|
|
|
|
onEditClick: function () {
|
|
if (!this.editWin) {
|
|
this.editWin = new Deluge.ux.AutoAdd.EditAutoAddCommandWindow();
|
|
this.editWin.on(
|
|
'watchdiredit',
|
|
function () {
|
|
this.updateWatchDirs();
|
|
},
|
|
this
|
|
);
|
|
}
|
|
var id = this.list.getSelectedRecords()[0].id;
|
|
this.editWin.show(id, this.watchdirs[id]);
|
|
},
|
|
|
|
onPreferencesShow: function () {
|
|
this.updateWatchDirs();
|
|
},
|
|
|
|
onRemoveClick: function () {
|
|
var record = this.list.getSelectedRecords()[0];
|
|
deluge.client.autoadd.remove(record.id, {
|
|
success: function () {
|
|
this.updateWatchDirs();
|
|
},
|
|
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.AutoAddPlugin = Ext.extend(Deluge.Plugin, {
|
|
name: 'AutoAdd',
|
|
|
|
static: {
|
|
prefsPage: null,
|
|
},
|
|
|
|
onDisable: function () {
|
|
deluge.preferences.removePage(Deluge.plugins.AutoAddPlugin.prefsPage);
|
|
Deluge.plugins.AutoAddPlugin.prefsPage = null;
|
|
},
|
|
|
|
onEnable: function () {
|
|
/*
|
|
* Called for each of the JavaScript files.
|
|
* This will prevent adding unnecessary tabs to the preferences window.
|
|
*/
|
|
if (!Deluge.plugins.AutoAddPlugin.prefsPage) {
|
|
Deluge.plugins.AutoAddPlugin.prefsPage = deluge.preferences.addPage(
|
|
new Deluge.ux.preferences.AutoAddPage()
|
|
);
|
|
}
|
|
},
|
|
});
|
|
|
|
Deluge.registerPlugin('AutoAdd', Deluge.plugins.AutoAddPlugin);
|