2 * Bittorrent Client using Qt and libtorrent.
3 * Copyright (C) 2015 Diego de las Heras <ngosang@hotmail.es>
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 * In addition, as a special exception, the copyright holders give permission to
20 * link this program with the OpenSSL project's "OpenSSL" library (or with
21 * modified versions of it that use the same license as the "OpenSSL" library),
22 * and distribute the linked executables. You must obey the GNU General Public
23 * License in all respects for all of the code used other than "OpenSSL". If you
24 * modify file(s), you may extend this exception to your version of the file(s),
25 * but you are not obligated to do so. If you do not wish to do so, delete this
26 * exception statement from your version.
31 if (window.qBittorrent === undefined) {
32 window.qBittorrent = {};
35 window.qBittorrent.PropWebseeds = (function() {
36 const exports = function() {
38 updateData: updateData
42 const webseedsDynTable = new Class({
44 initialize: function() {},
46 setup: function(table) {
47 this.table = $(table);
48 this.rows = new Hash();
51 removeRow: function(url) {
52 if (this.rows.has(url)) {
53 this.rows.get(url).destroy();
60 removeAllRows: function() {
61 this.rows.each(function(tr, url) {
66 updateRow: function(tr, row) {
67 const tds = tr.getElements('td');
68 for (let i = 0; i < row.length; ++i) {
69 tds[i].set('html', row[i]);
74 insertRow: function(row) {
76 if (this.rows.has(url)) {
77 const tableRow = this.rows.get(url);
78 this.updateRow(tableRow, row);
82 const tr = new Element('tr');
83 this.rows.set(url, tr);
84 for (let i = 0; i < row.length; ++i) {
85 const td = new Element('td');
86 td.set('html', row[i]);
89 tr.injectInside(this.table);
93 let current_hash = "";
95 let loadWebSeedsDataTimer;
96 const loadWebSeedsData = function() {
97 if ($('prop_webseeds').hasClass('invisible')
98 || $('propertiesPanel_collapseToggle').hasClass('panel-expand')) {
99 // Tab changed, don't do anything
102 const new_hash = torrentsTable.getCurrentTorrentID();
103 if (new_hash === "") {
104 wsTable.removeAllRows();
105 clearTimeout(loadWebSeedsDataTimer);
106 loadWebSeedsDataTimer = loadWebSeedsData.delay(10000);
109 if (new_hash != current_hash) {
110 wsTable.removeAllRows();
111 current_hash = new_hash;
113 const url = new URI('api/v2/torrents/webseeds?hash=' + current_hash);
118 onFailure: function() {
119 $('error_div').set('html', 'QBT_TR(qBittorrent client is not reachable)QBT_TR[CONTEXT=HttpServer]');
120 clearTimeout(loadWebSeedsDataTimer);
121 loadWebSeedsDataTimer = loadWebSeedsData.delay(20000);
123 onSuccess: function(webseeds) {
124 $('error_div').set('html', '');
126 // Update WebSeeds data
127 webseeds.each(function(webseed) {
130 row[0] = webseed.url;
131 wsTable.insertRow(row);
135 wsTable.removeAllRows();
137 clearTimeout(loadWebSeedsDataTimer);
138 loadWebSeedsDataTimer = loadWebSeedsData.delay(10000);
143 const updateData = function() {
144 clearTimeout(loadWebSeedsDataTimer);
148 const wsTable = new webseedsDynTable();
149 wsTable.setup($('webseedsTable'));
154 Object.freeze(window.qBittorrent.PropWebseeds);