From 2e2851dc13d73352530dd4495c7e05603b2e520d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 23:38:38 +0200 Subject: Adding upstream version 2.1.2~dev0+20240219. Signed-off-by: Daniel Baumann --- deluge/ui/web/js/deluge-all/add/OptionsPanel.js | 145 ++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 deluge/ui/web/js/deluge-all/add/OptionsPanel.js (limited to 'deluge/ui/web/js/deluge-all/add/OptionsPanel.js') diff --git a/deluge/ui/web/js/deluge-all/add/OptionsPanel.js b/deluge/ui/web/js/deluge-all/add/OptionsPanel.js new file mode 100644 index 0000000..365b001 --- /dev/null +++ b/deluge/ui/web/js/deluge-all/add/OptionsPanel.js @@ -0,0 +1,145 @@ +/** + * Deluge.add.OptionsPanel.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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.add'); + +Deluge.add.OptionsPanel = Ext.extend(Ext.TabPanel, { + torrents: {}, + + // layout options + region: 'south', + border: false, + activeTab: 0, + height: 265, + + initComponent: function () { + Deluge.add.OptionsPanel.superclass.initComponent.call(this); + this.files = this.add(new Deluge.add.FilesTab()); + this.form = this.add(new Deluge.add.OptionsTab()); + + this.files.on('fileschecked', this.onFilesChecked, this); + }, + + addTorrent: function (torrent) { + this.torrents[torrent['info_hash']] = torrent; + var fileIndexes = {}; + this.walkFileTree( + torrent['files_tree'], + function (filename, type, entry, parent) { + if (type != 'file') return; + fileIndexes[entry.index] = entry.download; + }, + this + ); + + var priorities = []; + Ext.each(Ext.keys(fileIndexes), function (index) { + priorities[index] = fileIndexes[index]; + }); + + var oldId = this.form.optionsManager.changeId( + torrent['info_hash'], + true + ); + this.form.optionsManager.setDefault('file_priorities', priorities); + this.form.optionsManager.changeId(oldId, true); + }, + + clear: function () { + this.files.clearFiles(); + this.form.optionsManager.resetAll(); + }, + + getFilename: function (torrentId) { + return this.torrents[torrentId]['filename']; + }, + + getOptions: function (torrentId) { + var oldId = this.form.optionsManager.changeId(torrentId, true); + var options = this.form.optionsManager.get(); + this.form.optionsManager.changeId(oldId, true); + Ext.each(options['file_priorities'], function (priority, index) { + options['file_priorities'][index] = priority ? 1 : 0; + }); + return options; + }, + + setTorrent: function (torrentId) { + if (!torrentId) return; + + this.torrentId = torrentId; + this.form.optionsManager.changeId(torrentId); + + this.files.clearFiles(); + var root = this.files.getRootNode(); + var priorities = this.form.optionsManager.get('file_priorities'); + + this.form.setDisabled(false); + + if (this.torrents[torrentId]['files_tree']) { + this.walkFileTree( + this.torrents[torrentId]['files_tree'], + function (filename, type, entry, parentNode) { + var node = new Ext.tree.TreeNode({ + download: entry.index ? priorities[entry.index] : true, + filename: filename, + fileindex: entry.index, + leaf: type != 'dir', + size: entry.length, + }); + parentNode.appendChild(node); + if (type == 'dir') return node; + }, + this, + root + ); + root.firstChild.expand(); + this.files.setDisabled(false); + this.files.show(); + } else { + // Files tab is empty so show options tab + this.form.show(); + this.files.setDisabled(true); + } + }, + + walkFileTree: function (files, callback, scope, parentNode) { + for (var filename in files.contents) { + var entry = files.contents[filename]; + var type = entry.type; + + if (scope) { + var ret = callback.apply(scope, [ + filename, + type, + entry, + parentNode, + ]); + } else { + var ret = callback(filename, type, entry, parentNode); + } + + if (type == 'dir') this.walkFileTree(entry, callback, scope, ret); + } + }, + + onFilesChecked: function (nodes, newValue, oldValue) { + Ext.each( + nodes, + function (node) { + if (node.attributes.fileindex < 0) return; + var priorities = + this.form.optionsManager.get('file_priorities'); + priorities[node.attributes.fileindex] = newValue; + this.form.optionsManager.update('file_priorities', priorities); + }, + this + ); + }, +}); -- cgit v1.2.3