summaryrefslogtreecommitdiffstats
path: root/deluge/plugins/AutoAdd/deluge_autoadd/data
diff options
context:
space:
mode:
Diffstat (limited to 'deluge/plugins/AutoAdd/deluge_autoadd/data')
-rw-r--r--deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd.js239
-rw-r--r--deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options.js475
-rw-r--r--deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options.ui1342
-rw-r--r--deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options/main_tab.js304
-rw-r--r--deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options/options_tab.js302
-rw-r--r--deluge/plugins/AutoAdd/deluge_autoadd/data/config.ui134
6 files changed, 2796 insertions, 0 deletions
diff --git a/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd.js b/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd.js
new file mode 100644
index 0000000..40086b3
--- /dev/null
+++ b/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd.js
@@ -0,0 +1,239 @@
+/**
+ * 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);
diff --git a/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options.js b/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options.js
new file mode 100644
index 0000000..49f752f
--- /dev/null
+++ b/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options.js
@@ -0,0 +1,475 @@
+/**
+ * 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');
+
+/**
+ * @class Deluge.ux.AutoAdd.AutoAddWindowBase
+ * @extends Ext.Window
+ */
+Deluge.ux.AutoAdd.AutoAddWindowBase = Ext.extend(Ext.Window, {
+ width: 350,
+ autoHeight: true,
+ closeAction: 'hide',
+
+ spin_ids: ['max_download_speed', 'max_upload_speed', 'stop_ratio'],
+ spin_int_ids: ['max_upload_slots', 'max_connections'],
+ chk_ids: [
+ 'stop_at_ratio',
+ 'remove_at_ratio',
+ 'move_completed',
+ 'add_paused',
+ 'auto_managed',
+ 'queue_to_top',
+ ],
+ toggle_ids: [
+ 'append_extension_toggle',
+ 'download_location_toggle',
+ 'label_toggle',
+ 'copy_torrent_toggle',
+ 'delete_copy_torrent_toggle',
+ 'seed_mode',
+ ],
+
+ accounts: new Ext.data.ArrayStore({
+ storeId: 'accountStore',
+ id: 0,
+ fields: [
+ {
+ name: 'displayText',
+ type: 'string',
+ },
+ ],
+ }),
+ labels: new Ext.data.ArrayStore({
+ storeId: 'labelStore',
+ id: 0,
+ fields: [
+ {
+ name: 'displayText',
+ type: 'string',
+ },
+ ],
+ }),
+
+ initComponent: function() {
+ Deluge.ux.AutoAdd.AutoAddWindowBase.superclass.initComponent.call(this);
+ this.addButton(_('Cancel'), this.onCancelClick, this);
+
+ this.MainTab = new Deluge.ux.AutoAdd.AutoAddMainPanel();
+ this.OptionsTab = new Deluge.ux.AutoAdd.AutoAddOptionsPanel();
+
+ this.form = this.add({
+ xtype: 'form',
+ baseCls: 'x-plain',
+ bodyStyle: 'padding: 5px',
+ items: [
+ {
+ xtype: 'tabpanel',
+ activeTab: 0,
+ items: [this.MainTab, this.OptionsTab],
+ },
+ ],
+ });
+ },
+
+ onCancelClick: function() {
+ this.hide();
+ },
+
+ getOptions: function() {
+ var options = {};
+
+ options['enabled'] = Ext.getCmp('enabled').getValue();
+ options['path'] = Ext.getCmp('path').getValue();
+ options['download_location'] = Ext.getCmp(
+ 'download_location'
+ ).getValue();
+ options['move_completed_path'] = Ext.getCmp(
+ 'move_completed_path'
+ ).getValue();
+ options['copy_torrent'] = Ext.getCmp('copy_torrent').getValue();
+
+ options['label'] = Ext.getCmp('label').getValue();
+ options['append_extension'] = Ext.getCmp('append_extension').getValue();
+ options['owner'] = Ext.getCmp('owner').getValue();
+
+ this.toggle_ids.forEach(function(toggle_id) {
+ options[toggle_id] = Ext.getCmp(toggle_id).getValue();
+ });
+ this.spin_ids.forEach(function(spin_id) {
+ options[spin_id] = Ext.getCmp(spin_id).getValue();
+ options[spin_id + '_toggle'] = Ext.getCmp(
+ spin_id + '_toggle'
+ ).getValue();
+ });
+ this.spin_int_ids.forEach(function(spin_int_id) {
+ options[spin_int_id] = Ext.getCmp(spin_int_id).getValue();
+ options[spin_int_id + '_toggle'] = Ext.getCmp(
+ spin_int_id + '_toggle'
+ ).getValue();
+ });
+ this.chk_ids.forEach(function(chk_id) {
+ options[chk_id] = Ext.getCmp(chk_id).getValue();
+ options[chk_id + '_toggle'] = Ext.getCmp(
+ chk_id + '_toggle'
+ ).getValue();
+ });
+
+ if (
+ options['copy_torrent_toggle'] &&
+ options['path'] === options['copy_torrent']
+ ) {
+ throw _(
+ '"Watch Folder" directory and "Copy of .torrent' +
+ ' files to" directory cannot be the same!'
+ );
+ }
+
+ return options;
+ },
+
+ loadOptions: function(options) {
+ /*
+ * Populate all available options data to the UI
+ */
+ var value;
+
+ if (options === undefined) {
+ options = {};
+ }
+ Ext.getCmp('enabled').setValue(
+ options['enabled'] !== undefined ? options['enabled'] : true
+ );
+ Ext.getCmp('isnt_append_extension').setValue(true);
+ Ext.getCmp('append_extension_toggle').setValue(
+ options['append_extension_toggle'] !== undefined
+ ? options['append_extension_toggle']
+ : false
+ );
+ Ext.getCmp('append_extension').setValue(
+ options['append_extension'] !== undefined
+ ? options['append_extension']
+ : '.added'
+ );
+ Ext.getCmp('download_location_toggle').setValue(
+ options['download_location_toggle'] !== undefined
+ ? options['download_location_toggle']
+ : false
+ );
+ Ext.getCmp('copy_torrent_toggle').setValue(
+ options['copy_torrent_toggle'] !== undefined
+ ? options['copy_torrent_toggle']
+ : false
+ );
+ Ext.getCmp('delete_copy_torrent_toggle').setValue(
+ options['delete_copy_torrent_toggle'] !== undefined
+ ? options['delete_copy_torrent_toggle']
+ : false
+ );
+
+ value =
+ options['seed_mode'] !== undefined ? options['seed_mode'] : false;
+ Ext.getCmp('seed_mode').setValue(value);
+
+ this.accounts.removeAll(true);
+ this.labels.removeAll(true);
+ Ext.getCmp('owner').store = this.accounts;
+ Ext.getCmp('label').store = this.labels;
+ Ext.getCmp('label').setValue(
+ options['label'] !== undefined ? options['label'] : ''
+ );
+ Ext.getCmp('label_toggle').setValue(
+ options['label_toggle'] !== undefined
+ ? options['label_toggle']
+ : false
+ );
+
+ this.spin_ids.forEach(function(spin_id) {
+ Ext.getCmp(spin_id).setValue(
+ options[spin_id] !== undefined ? options[spin_id] : 0
+ );
+ Ext.getCmp(spin_id + '_toggle').setValue(
+ options[spin_id + '_toggle'] !== undefined
+ ? options[spin_id + '_toggle']
+ : false
+ );
+ });
+ this.chk_ids.forEach(function(chk_id) {
+ Ext.getCmp(chk_id).setValue(
+ options[chk_id] !== undefined ? options[chk_id] : true
+ );
+ Ext.getCmp(chk_id + '_toggle').setValue(
+ options[chk_id + '_toggle'] !== undefined
+ ? options[chk_id + '_toggle']
+ : false
+ );
+ });
+ value =
+ options['add_paused'] !== undefined ? options['add_paused'] : true;
+ if (!value) {
+ Ext.getCmp('not_add_paused').setValue(true);
+ }
+ value =
+ options['queue_to_top'] !== undefined
+ ? options['queue_to_top']
+ : true;
+ if (!value) {
+ Ext.getCmp('not_queue_to_top').setValue(true);
+ }
+ value =
+ options['auto_managed'] !== undefined
+ ? options['auto_managed']
+ : true;
+ if (!value) {
+ Ext.getCmp('not_auto_managed').setValue(true);
+ }
+ [
+ 'move_completed_path',
+ 'path',
+ 'download_location',
+ 'copy_torrent',
+ ].forEach(function(field) {
+ value = options[field] !== undefined ? options[field] : '';
+ Ext.getCmp(field).setValue(value);
+ });
+
+ if (Object.keys(options).length === 0) {
+ deluge.client.core.get_config({
+ success: function(config) {
+ var value;
+ Ext.getCmp('download_location').setValue(
+ options['download_location'] !== undefined
+ ? options['download_location']
+ : config['download_location']
+ );
+ value =
+ options['move_completed_toggle'] !== undefined
+ ? options['move_completed_toggle']
+ : config['move_completed'];
+ if (value) {
+ Ext.getCmp('move_completed_toggle').setValue(
+ options['move_completed_toggle'] !== undefined
+ ? options['move_completed_toggle']
+ : false
+ );
+ Ext.getCmp('move_completed_path').setValue(
+ options['move_completed_path'] !== undefined
+ ? options['move_completed_path']
+ : config['move_completed_path']
+ );
+ }
+ value =
+ options['copy_torrent_toggle'] !== undefined
+ ? options['copy_torrent_toggle']
+ : config['copy_torrent_file'];
+ if (value) {
+ Ext.getCmp('copy_torrent_toggle').setValue(true);
+ Ext.getCmp('copy_torrent').setValue(
+ options['copy_torrent'] !== undefined
+ ? options['copy_torrent']
+ : config['torrentfiles_location']
+ );
+ }
+ value =
+ options['delete_copy_torrent_toggle'] !== undefined
+ ? options['copy_torrent_toggle']
+ : config['del_copy_torrent_file'];
+ if (value) {
+ Ext.getCmp('delete_copy_torrent_toggle').setValue(true);
+ }
+ },
+ });
+ }
+
+ deluge.client.core.get_enabled_plugins({
+ success: function(plugins) {
+ if (plugins !== undefined && plugins.indexOf('Label') > -1) {
+ this.MainTab.LabelFset.setVisible(true);
+ deluge.client.label.get_labels({
+ success: function(labels) {
+ for (
+ var index = 0;
+ index < labels.length;
+ index++
+ ) {
+ labels[index] = [labels[index]];
+ }
+ this.labels.loadData(labels, false);
+ },
+ failure: function(failure) {
+ console.error(failure);
+ },
+ scope: this,
+ });
+ } else {
+ this.MainTab.LabelFset.setVisible(false);
+ }
+ },
+ scope: this,
+ });
+
+ var me = this;
+
+ function on_accounts(accounts, owner) {
+ for (var index = 0; index < accounts.length; index++) {
+ accounts[index] = [accounts[index]['username']];
+ }
+ me.accounts.loadData(accounts, false);
+ Ext.getCmp('owner')
+ .setValue(owner)
+ .enable();
+ }
+
+ function on_accounts_failure(failure) {
+ deluge.client.autoadd.get_auth_user({
+ success: function(user) {
+ me.accounts.loadData([[user]], false);
+ Ext.getCmp('owner')
+ .setValue(user)
+ .disable(true);
+ },
+ scope: this,
+ });
+ }
+
+ deluge.client.autoadd.is_admin_level({
+ success: function(is_admin) {
+ if (is_admin) {
+ deluge.client.core.get_known_accounts({
+ success: function(accounts) {
+ deluge.client.autoadd.get_auth_user({
+ success: function(user) {
+ on_accounts(
+ accounts,
+ options['owner'] !== undefined
+ ? options['owner']
+ : user
+ );
+ },
+ scope: this,
+ });
+ },
+ failure: on_accounts_failure,
+ scope: this,
+ });
+ } else {
+ on_accounts_failure(null);
+ }
+ },
+ scope: this,
+ });
+ },
+});
+
+/**
+ * @class Deluge.ux.AutoAdd.EditAutoAddCommandWindow
+ * @extends Deluge.ux.AutoAdd.AutoAddWindowBase
+ */
+Deluge.ux.AutoAdd.EditAutoAddCommandWindow = Ext.extend(
+ Deluge.ux.AutoAdd.AutoAddWindowBase,
+ {
+ title: _('Edit Watch Folder'),
+
+ initComponent: function() {
+ Deluge.ux.AutoAdd.EditAutoAddCommandWindow.superclass.initComponent.call(
+ this
+ );
+ this.addButton(_('Save'), this.onSaveClick, this);
+ this.addEvents({
+ watchdiredit: true,
+ });
+ },
+
+ show: function(watchdir_id, options) {
+ Deluge.ux.AutoAdd.EditAutoAddCommandWindow.superclass.show.call(
+ this
+ );
+ this.watchdir_id = watchdir_id;
+ this.loadOptions(options);
+ },
+
+ onSaveClick: function() {
+ try {
+ var options = this.getOptions();
+ deluge.client.autoadd.set_options(this.watchdir_id, options, {
+ success: function() {
+ this.fireEvent('watchdiredit', this, options);
+ },
+ scope: this,
+ });
+ } catch (err) {
+ Ext.Msg.show({
+ title: _('Incompatible Option'),
+ msg: err,
+ buttons: Ext.Msg.OK,
+ scope: this,
+ });
+ }
+
+ this.hide();
+ },
+ }
+);
+
+/**
+ * @class Deluge.ux.AutoAdd.AddAutoAddCommandWindow
+ * @extends Deluge.ux.AutoAdd.AutoAddWindowBase
+ */
+Deluge.ux.AutoAdd.AddAutoAddCommandWindow = Ext.extend(
+ Deluge.ux.AutoAdd.AutoAddWindowBase,
+ {
+ title: _('Add Watch Folder'),
+
+ initComponent: function() {
+ Deluge.ux.AutoAdd.AddAutoAddCommandWindow.superclass.initComponent.call(
+ this
+ );
+ this.addButton(_('Add'), this.onAddClick, this);
+ this.addEvents({
+ watchdiradd: true,
+ });
+ },
+
+ show: function() {
+ Deluge.ux.AutoAdd.AddAutoAddCommandWindow.superclass.show.call(
+ this
+ );
+ this.loadOptions();
+ },
+
+ onAddClick: function() {
+ var options = this.getOptions();
+ deluge.client.autoadd.add(options, {
+ success: function() {
+ this.fireEvent('watchdiradd', this, options);
+ this.hide();
+ },
+ failure: function(err) {
+ const regex = /: (.*\n)\n?\]/m;
+ var error;
+ if ((error = regex.exec(err.error.message)) !== null) {
+ error = error[1];
+ } else {
+ error = err.error.message;
+ }
+ Ext.Msg.show({
+ title: _('Incompatible Option'),
+ msg: error,
+ buttons: Ext.Msg.OK,
+ scope: this,
+ });
+ },
+ scope: this,
+ });
+ },
+ }
+);
diff --git a/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options.ui b/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options.ui
new file mode 100644
index 0000000..a4cd364
--- /dev/null
+++ b/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options.ui
@@ -0,0 +1,1342 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface>
+ <requires lib="gtk+" version="3.0"/>
+ <object class="GtkAdjustment" id="adjustment1">
+ <property name="lower">-1</property>
+ <property name="upper">10000</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment2">
+ <property name="lower">-1</property>
+ <property name="upper">10000</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment3">
+ <property name="lower">-1</property>
+ <property name="upper">10000</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment4">
+ <property name="lower">-1</property>
+ <property name="upper">10000</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment5">
+ <property name="upper">100</property>
+ <property name="value">2</property>
+ <property name="step_increment">0.10000000149</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkDialog" id="options_dialog">
+ <property name="can_focus">False</property>
+ <property name="title" translatable="yes">Watch Folder Properties</property>
+ <property name="resizable">False</property>
+ <property name="modal">True</property>
+ <property name="type_hint">dialog</property>
+ <signal name="close" handler="on_options_dialog_close" swapped="no"/>
+ <child>
+ <placeholder/>
+ </child>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="opts_cancel_button">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="on_opts_cancel" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="opts_add_button">
+ <property name="label">gtk-add</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="on_opts_add" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="opts_apply_button">
+ <property name="label">gtk-apply</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="on_opts_apply" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkNotebook" id="notebook1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <object class="GtkBox" id="vbox2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">6</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkFrame" id="frame2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkBox" id="vbox6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkBox" id="hbox3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkEntry" id="path_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">If a .torrent file is added to this directory,
+it will be added to the session.</property>
+ <property name="invisible_char">●</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFileChooserButton" id="path_chooser">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">If a .torrent file is added to this directory,
+it will be added to the session.</property>
+ <property name="action">select-folder</property>
+ <property name="title" translatable="yes">Select A Folder</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="enabled">
+ <property name="label" translatable="yes">Enable this watch folder</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Watch Folder&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkBox" id="vbox7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkRadioButton" id="isnt_append_extension">
+ <property name="label" translatable="yes">Delete .torrent after adding</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Once the torrent is added to the session,
+the .torrent will be deleted.</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkRadioButton" id="append_extension_toggle">
+ <property name="label" translatable="yes">Append extension after adding:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Once the torrent is added to the session,
+an extension will be appended to the .torrent
+and it will remain in the same directory.</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">isnt_append_extension</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="append_extension">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="text" translatable="yes">.added</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="table4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <child>
+ <object class="GtkRadioButton" id="copy_torrent_toggle">
+ <property name="label" translatable="yes">Copy of .torrent files to:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Once the torrent is added to the session,
+the .torrent will copied to the chosen directory
+and deleted from the watch folder.</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">isnt_append_extension</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkEntry" id="copy_torrent_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFileChooserButton" id="copy_torrent_chooser">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="action">select-folder</property>
+ <property name="title" translatable="yes">Select A Folder</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="delete_copy_torrent_toggle">
+ <property name="label" translatable="yes">Delete copy of torrent file on remove</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip_text" translatable="yes">Once the torrent is deleted from the session,
+also delete the .torrent file used to add it.</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_padding">15</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Torrent File Action&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkBox" id="vbox3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkCheckButton" id="download_location_toggle">
+ <property name="label" translatable="yes">Set download folder</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">This folder will be where the torrent data is downloaded to.</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkEntry" id="download_location_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFileChooserButton" id="download_location_chooser">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="action">select-folder</property>
+ <property name="title" translatable="yes">Select A Folder</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Download Folder&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkBox" id="vbox4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkCheckButton" id="move_completed_toggle">
+ <property name="label" translatable="yes">Set move completed folder</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkEntry" id="move_completed_path_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFileChooserButton" id="move_completed_path_chooser">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="action">select-folder</property>
+ <property name="title" translatable="yes">Select A Folder</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="move_completed">
+ <property name="sensitive">False</property>
+ <property name="can_focus">False</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Move Completed&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="label_frame">
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment15">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkBox" id="hbox11">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckButton" id="label_toggle">
+ <property name="label" translatable="yes">Label: </property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_entry">True</property>
+ <child internal-child="entry">
+ <object class="GtkEntry" id="combobox-entry1">
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label17">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Label&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Main</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="vbox5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">6</property>
+ <property name="spacing">5</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkFrame" id="OwnerFrame">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkComboBox" id="OwnerCombobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip_text" translatable="yes">The user selected here will be the owner of the torrent.</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Owner&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment11">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkTable" id="table1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">3</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">2</property>
+ <property name="row_spacing">4</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="max_upload_speed_toggle">
+ <property name="label" translatable="yes">Max Upload Speed:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="max_connections_toggle">
+ <property name="label" translatable="yes">Max Connections:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="max_upload_slots_toggle">
+ <property name="label" translatable="yes">Max Upload Slots:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="max_download_speed">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="adjustment">adjustment1</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">1</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="max_upload_speed">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="adjustment">adjustment2</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">1</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="max_connections">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="adjustment">adjustment3</property>
+ <property name="climb_rate">1</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="max_upload_slots">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="adjustment">adjustment4</property>
+ <property name="climb_rate">1</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label14">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">KiB/s</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label15">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">KiB/s</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="max_download_speed_toggle">
+ <property name="label" translatable="yes">Max Download Speed:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Bandwidth&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkTable" id="table2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="n_rows">6</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">2</property>
+ <property name="row_spacing">4</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckButton" id="stop_at_ratio_toggle">
+ <property name="label" translatable="yes">Stop seed at ratio:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment14">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkCheckButton" id="remove_at_ratio">
+ <property name="label" translatable="yes">Remove at ratio</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="auto_managed_toggle">
+ <property name="label" translatable="yes">Auto Managed:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="remove_at_ratio_toggle">
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="stop_ratio_toggle">
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="stop_ratio">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="adjustment">adjustment5</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">1</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="auto_managed_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkRadioButton" id="auto_managed">
+ <property name="label">gtk-yes</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="isnt_auto_managed">
+ <property name="label">gtk-no</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">auto_managed</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="stop_at_ratio">
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="add_paused_toggle">
+ <property name="label" translatable="yes">Add Paused:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="add_paused_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkRadioButton" id="add_paused">
+ <property name="label">gtk-yes</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="isnt_add_paused">
+ <property name="label">gtk-no</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">add_paused</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="queue_to_top_toggle">
+ <property name="label" translatable="yes">Queue to:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_toggle_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkRadioButton" id="queue_to_top">
+ <property name="label" translatable="yes">Top</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="isnt_queue_to_top">
+ <property name="label" translatable="yes">Bottom</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">queue_to_top</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="seed_mode">
+ <property name="label" translatable="yes">Skip File Hash Check</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label16">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Queue&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Options</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHButtonBox" id="hbuttonbox2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">opts_cancel_button</action-widget>
+ <action-widget response="0">opts_add_button</action-widget>
+ <action-widget response="0">opts_apply_button</action-widget>
+ </action-widgets>
+ </object>
+</interface>
diff --git a/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options/main_tab.js b/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options/main_tab.js
new file mode 100644
index 0000000..79d2600
--- /dev/null
+++ b/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options/main_tab.js
@@ -0,0 +1,304 @@
+/**
+ * Script: main_tab.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');
+
+/**
+ * @class Deluge.ux.AutoAdd.AutoAddMainPanel
+ * @extends Ext.Panel
+ */
+Deluge.ux.AutoAdd.AutoAddMainPanel = Ext.extend(Ext.Panel, {
+ id: 'main_tab_panel',
+ title: _('Main'),
+
+ initComponent: function() {
+ Deluge.ux.AutoAdd.AutoAddMainPanel.superclass.initComponent.call(this);
+ this.watchFolderFset = new Ext.form.FieldSet({
+ xtype: 'fieldset',
+ border: false,
+ title: _('Watch Folder'),
+ defaultType: 'textfield',
+ style: 'margin-top: 3px; margin-bottom: 0px; padding-bottom: 0px;',
+ width: '85%',
+ labelWidth: 1,
+ items: [
+ {
+ xtype: 'textfield',
+ id: 'path',
+ hideLabel: true,
+ width: 304,
+ },
+ {
+ hideLabel: true,
+ id: 'enabled',
+ xtype: 'checkbox',
+ boxLabel: _('Enable this watch folder'),
+ checked: true,
+ },
+ ],
+ });
+
+ this.torrentActionFset = new Ext.form.FieldSet({
+ xtype: 'fieldset',
+ border: false,
+ title: _('Torrent File Action'),
+ style: 'margin-top: 3px; margin-bottom: 0px; padding-bottom: 0px;',
+ width: '85%',
+ labelWidth: 1,
+ defaults: {
+ style: 'margin-bottom: 2px',
+ },
+ items: [
+ {
+ xtype: 'radiogroup',
+ columns: 1,
+ items: [
+ {
+ xtype: 'radio',
+ name: 'torrent_action',
+ id: 'isnt_append_extension',
+ boxLabel: _('Delete .torrent after adding'),
+ checked: true,
+ hideLabel: true,
+ listeners: {
+ check: function(cb, newValue) {
+ if (newValue) {
+ Ext.getCmp(
+ 'append_extension'
+ ).setDisabled(newValue);
+ Ext.getCmp('copy_torrent').setDisabled(
+ newValue
+ );
+ Ext.getCmp(
+ 'delete_copy_torrent_toggle'
+ ).setDisabled(newValue);
+ }
+ },
+ },
+ },
+ {
+ xtype: 'container',
+ layout: 'hbox',
+ hideLabel: true,
+ items: [
+ {
+ xtype: 'radio',
+ name: 'torrent_action',
+ id: 'append_extension_toggle',
+ boxLabel: _(
+ 'Append extension after adding:'
+ ),
+ hideLabel: true,
+ listeners: {
+ check: function(cb, newValue) {
+ if (newValue) {
+ Ext.getCmp(
+ 'append_extension'
+ ).setDisabled(!newValue);
+ Ext.getCmp(
+ 'copy_torrent'
+ ).setDisabled(newValue);
+ Ext.getCmp(
+ 'delete_copy_torrent_toggle'
+ ).setDisabled(newValue);
+ }
+ },
+ },
+ },
+ {
+ xtype: 'textfield',
+ id: 'append_extension',
+ hideLabel: true,
+ disabled: true,
+ style: 'margin-left: 2px',
+ width: 112,
+ },
+ ],
+ },
+ {
+ xtype: 'container',
+ hideLabel: true,
+ items: [
+ {
+ xtype: 'container',
+ layout: 'hbox',
+ hideLabel: true,
+ items: [
+ {
+ xtype: 'radio',
+ name: 'torrent_action',
+ id: 'copy_torrent_toggle',
+ boxLabel: _(
+ 'Copy of .torrent files to:'
+ ),
+ hideLabel: true,
+ listeners: {
+ check: function(cb, newValue) {
+ if (newValue) {
+ Ext.getCmp(
+ 'append_extension'
+ ).setDisabled(newValue);
+ Ext.getCmp(
+ 'copy_torrent'
+ ).setDisabled(
+ !newValue
+ );
+ Ext.getCmp(
+ 'delete_copy_torrent_toggle'
+ ).setDisabled(
+ !newValue
+ );
+ }
+ },
+ },
+ },
+ {
+ xtype: 'textfield',
+ id: 'copy_torrent',
+ hideLabel: true,
+ disabled: true,
+ style: 'margin-left: 2px',
+ width: 152,
+ },
+ ],
+ },
+ {
+ xtype: 'checkbox',
+ id: 'delete_copy_torrent_toggle',
+ boxLabel: _(
+ 'Delete copy of torrent file on remove'
+ ),
+ style: 'margin-left: 10px',
+ disabled: true,
+ },
+ ],
+ },
+ ],
+ },
+ ],
+ });
+
+ this.downloadFolderFset = new Ext.form.FieldSet({
+ xtype: 'fieldset',
+ border: false,
+ title: _('Download Folder'),
+ defaultType: 'textfield',
+ style: 'margin-top: 3px; margin-bottom: 0px; padding-bottom: 0px;',
+ width: '85%',
+ labelWidth: 1,
+ items: [
+ {
+ hideLabel: true,
+ id: 'download_location_toggle',
+ xtype: 'checkbox',
+ boxLabel: _('Set download folder'),
+ listeners: {
+ check: function(cb, checked) {
+ Ext.getCmp('download_location').setDisabled(
+ !checked
+ );
+ },
+ },
+ },
+ {
+ xtype: 'textfield',
+ id: 'download_location',
+ hideLabel: true,
+ width: 304,
+ disabled: true,
+ },
+ ],
+ });
+
+ this.moveCompletedFset = new Ext.form.FieldSet({
+ xtype: 'fieldset',
+ border: false,
+ title: _('Move Completed'),
+ defaultType: 'textfield',
+ style: 'margin-top: 3px; margin-bottom: 0px; padding-bottom: 0px;',
+ width: '85%',
+ labelWidth: 1,
+ items: [
+ {
+ hideLabel: true,
+ id: 'move_completed_toggle',
+ xtype: 'checkbox',
+ boxLabel: _('Set move completed folder'),
+ listeners: {
+ check: function(cb, checked) {
+ Ext.getCmp('move_completed_path').setDisabled(
+ !checked
+ );
+ },
+ },
+ },
+ {
+ xtype: 'textfield',
+ id: 'move_completed_path',
+ hideLabel: true,
+ width: 304,
+ disabled: true,
+ },
+ ],
+ });
+
+ this.LabelFset = new Ext.form.FieldSet({
+ xtype: 'fieldset',
+ border: false,
+ title: _('Label'),
+ defaultType: 'textfield',
+ style: 'margin-top: 3px; margin-bottom: 0px; padding-bottom: 3px;',
+ //width: '85%',
+ labelWidth: 1,
+ //hidden: true,
+ items: [
+ {
+ xtype: 'container',
+ layout: 'hbox',
+ hideLabel: true,
+ items: [
+ {
+ hashLabel: false,
+ id: 'label_toggle',
+ xtype: 'checkbox',
+ boxLabel: _('Label:'),
+ listeners: {
+ check: function(cb, checked) {
+ Ext.getCmp('label').setDisabled(!checked);
+ },
+ },
+ },
+ {
+ xtype: 'combo',
+ id: 'label',
+ hideLabel: true,
+ //width: 220,
+ width: 254,
+ disabled: true,
+ style: 'margin-left: 2px',
+ mode: 'local',
+ valueField: 'displayText',
+ displayField: 'displayText',
+ },
+ ],
+ },
+ ],
+ });
+
+ this.add([
+ this.watchFolderFset,
+ this.torrentActionFset,
+ this.downloadFolderFset,
+ this.moveCompletedFset,
+ this.LabelFset,
+ ]);
+ },
+});
diff --git a/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options/options_tab.js b/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options/options_tab.js
new file mode 100644
index 0000000..a69490c
--- /dev/null
+++ b/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd_options/options_tab.js
@@ -0,0 +1,302 @@
+/**
+ * Script: options_tab.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');
+
+/**
+ * @class Deluge.ux.AutoAdd.AutoAddOptionsPanel
+ * @extends Ext.Panel
+ */
+Deluge.ux.AutoAdd.AutoAddOptionsPanel = Ext.extend(Ext.Panel, {
+ id: 'options_tab_panel',
+ title: _('Options'),
+
+ initComponent: function() {
+ Deluge.ux.AutoAdd.AutoAddOptionsPanel.superclass.initComponent.call(
+ this
+ );
+ var maxDownload = {
+ idCheckbox: 'max_download_speed_toggle',
+ labelCheckbox: 'Max Download Speed (KiB/s):',
+ idSpinner: 'max_download_speed',
+ decimalPrecision: 1,
+ };
+ var maxUploadSpeed = {
+ idCheckbox: 'max_upload_speed_toggle',
+ labelCheckbox: 'Max upload Speed (KiB/s):',
+ idSpinner: 'max_upload_speed',
+ decimalPrecision: 1,
+ };
+ var maxConnections = {
+ idCheckbox: 'max_connections_toggle',
+ labelCheckbox: 'Max Connections::',
+ idSpinner: 'max_connections',
+ decimalPrecision: 0,
+ };
+ var maxUploadSlots = {
+ idCheckbox: 'max_upload_slots_toggle',
+ labelCheckbox: 'Max Upload Slots:',
+ idSpinner: 'max_upload_slots',
+ decimalPrecision: 0,
+ };
+ // queue data
+ var addPause = {
+ idCheckbox: 'add_paused_toggle',
+ labelCheckbox: 'Add Pause:',
+ nameRadio: 'add_paused',
+ labelRadio: {
+ yes: 'Yes',
+ no: 'No',
+ },
+ };
+ var queueTo = {
+ idCheckbox: 'queue_to_top_toggle',
+ labelCheckbox: 'Queue To:',
+ nameRadio: 'queue_to_top',
+ labelRadio: {
+ yes: 'Top',
+ no: 'Bottom',
+ },
+ };
+ var autoManaged = {
+ idCheckbox: 'auto_managed_toggle',
+ labelCheckbox: 'Auto Managed:',
+ nameRadio: 'auto_managed',
+ labelRadio: {
+ yes: 'Yes',
+ no: 'No',
+ },
+ };
+
+ this.ownerFset = new Ext.form.FieldSet({
+ xtype: 'fieldset',
+ border: false,
+ title: _('Owner'),
+ style: 'margin-top: 3px; margin-bottom: 0px; padding-bottom: 0px;',
+ //width: '85%',
+ labelWidth: 1,
+ items: [
+ {
+ xtype: 'combo',
+ id: 'owner',
+ hideLabel: true,
+ width: 312,
+ mode: 'local',
+ valueField: 'displayText',
+ displayField: 'displayText',
+ },
+ ],
+ });
+
+ this.bandwidthFset = new Ext.form.FieldSet({
+ xtype: 'fieldset',
+ border: false,
+ title: _('Bandwidth'),
+ style: 'margin-top: 3px; margin-bottom: 0px; padding-bottom: 0px;',
+ //width: '85%',
+ labelWidth: 1,
+ defaults: {
+ style: 'margin-bottom: 5px',
+ },
+ });
+ this.bandwidthFset.add(this._getBandwidthContainer(maxDownload));
+ this.bandwidthFset.add(this._getBandwidthContainer(maxUploadSpeed));
+ this.bandwidthFset.add(this._getBandwidthContainer(maxConnections));
+ this.bandwidthFset.add(this._getBandwidthContainer(maxUploadSlots));
+
+ this.queueFset = new Ext.form.FieldSet({
+ xtype: 'fieldset',
+ border: false,
+ title: _('Queue'),
+ style: 'margin-top: 3px; margin-bottom: 0px; padding-bottom: 0px;',
+ //width: '85%',
+ labelWidth: 1,
+ defaults: {
+ style: 'margin-bottom: 5px',
+ },
+ items: [
+ {
+ xtype: 'container',
+ layout: 'hbox',
+ hideLabel: true,
+ },
+ ],
+ });
+ this.queueFset.add(this._getQueueContainer(addPause));
+ this.queueFset.add(this._getQueueContainer(queueTo));
+ this.queueFset.add(this._getQueueContainer(autoManaged));
+ this.queueFset.add({
+ xtype: 'container',
+ hideLabel: true,
+ items: [
+ {
+ xtype: 'container',
+ layout: 'hbox',
+ hideLabel: true,
+ items: [
+ {
+ xtype: 'checkbox',
+ id: 'stop_at_ratio_toggle',
+ boxLabel: _('Stop seed at ratio:'),
+ hideLabel: true,
+ width: 175,
+ listeners: {
+ check: function(cb, checked) {
+ Ext.getCmp('stop_ratio').setDisabled(
+ !checked
+ );
+ Ext.getCmp('remove_at_ratio').setDisabled(
+ !checked
+ );
+ },
+ },
+ },
+ {
+ xtype: 'spinnerfield',
+ id: 'stop_ratio',
+ hideLabel: true,
+ disabled: true,
+ value: 0.0,
+ minValue: 0.0,
+ maxValue: 100.0,
+ decimalPrecision: 1,
+ incrementValue: 0.1,
+ style: 'margin-left: 2px',
+ width: 100,
+ },
+ ],
+ },
+ {
+ xtype: 'container',
+ layout: 'hbox',
+ hideLabel: true,
+ style: 'margin-left: 10px',
+ items: [
+ {
+ xtype: 'checkbox',
+ id: 'remove_at_ratio',
+ boxLabel: _('Remove at ratio'),
+ disabled: true,
+ checked: true,
+ },
+ {
+ xtype: 'checkbox',
+ id: 'remove_at_ratio_toggle',
+ disabled: true,
+ checked: true,
+ hidden: true,
+ },
+ {
+ xtype: 'checkbox',
+ id: 'stop_ratio_toggle',
+ disabled: true,
+ checked: true,
+ hidden: true,
+ },
+ {
+ xtype: 'checkbox',
+ id: 'stop_ratio_toggle',
+ disabled: true,
+ checked: true,
+ hidden: true,
+ },
+ ],
+ },
+ ],
+ });
+ this.queueFset.add({
+ xtype: 'checkbox',
+ id: 'seed_mode',
+ boxLabel: _('Skip File Hash Check'),
+ hideLabel: true,
+ width: 175,
+ });
+
+ this.add([this.ownerFset, this.bandwidthFset, this.queueFset]);
+ },
+
+ _getBandwidthContainer: function(values) {
+ return new Ext.Container({
+ xtype: 'container',
+ layout: 'hbox',
+ hideLabel: true,
+ items: [
+ {
+ xtype: 'checkbox',
+ hideLabel: true,
+ id: values.idCheckbox,
+ boxLabel: _(values.labelCheckbox),
+ width: 175,
+ listeners: {
+ check: function(cb, checked) {
+ Ext.getCmp(values.idSpinner).setDisabled(!checked);
+ },
+ },
+ },
+ {
+ xtype: 'spinnerfield',
+ id: values.idSpinner,
+ hideLabel: true,
+ disabled: true,
+ minValue: -1,
+ maxValue: 10000,
+ value: 0.0,
+ decimalPrecision: values.decimalPrecision,
+ style: 'margin-left: 2px',
+ width: 100,
+ },
+ ],
+ });
+ },
+
+ _getQueueContainer: function(values) {
+ return new Ext.Container({
+ xtype: 'container',
+ layout: 'hbox',
+ hideLabel: true,
+ items: [
+ {
+ xtype: 'checkbox',
+ hideLabel: true,
+ id: values.idCheckbox,
+ boxLabel: _(values.labelCheckbox),
+ width: 175,
+ listeners: {
+ check: function(cb, checked) {
+ Ext.getCmp(values.nameRadio).setDisabled(!checked);
+ Ext.getCmp('not_' + values.nameRadio).setDisabled(
+ !checked
+ );
+ },
+ },
+ },
+ {
+ xtype: 'radio',
+ name: values.nameRadio,
+ id: values.nameRadio,
+ boxLabel: _(values.labelRadio.yes),
+ hideLabel: true,
+ checked: true,
+ disabled: true,
+ width: 50,
+ },
+ {
+ xtype: 'radio',
+ name: values.nameRadio,
+ id: 'not_' + values.nameRadio,
+ boxLabel: _(values.labelRadio.no),
+ hideLabel: true,
+ disabled: true,
+ },
+ ],
+ });
+ },
+});
diff --git a/deluge/plugins/AutoAdd/deluge_autoadd/data/config.ui b/deluge/plugins/AutoAdd/deluge_autoadd/data/config.ui
new file mode 100644
index 0000000..0e645d3
--- /dev/null
+++ b/deluge/plugins/AutoAdd/deluge_autoadd/data/config.ui
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface>
+ <requires lib="gtk+" version="3.0"/>
+ <object class="GtkWindow" id="prefs_window">
+ <property name="can_focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="prefs_box_1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkBox" id="prefs_box">
+ <property name="width_request">340</property>
+ <property name="height_request">390</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">3</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkBox" id="watchdirs_vbox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="homogeneous">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Watch Folders:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHButtonBox" id="hbuttonbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkButton" id="add_button">
+ <property name="label">gtk-add</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="on_add_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="remove_button">
+ <property name="label">gtk-remove</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="on_remove_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="edit_button">
+ <property name="label">gtk-edit</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="on_edit_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>