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 = {};
34 window.qBittorrent.PropWebseeds = (function() {
35 const exports = function() {
37 updateData: updateData
41 const webseedsDynTable = new Class({
43 initialize: function() {},
45 setup: function(table) {
46 this.table = $(table);
47 this.rows = new Hash();
50 removeRow: function(url) {
51 if (this.rows.has(url)) {
52 this.rows.get(url).destroy();
59 removeAllRows: function() {
60 this.rows.each((tr, url) => {
65 updateRow: function(tr, row) {
66 const tds = tr.getElements("td");
67 for (let i = 0; i < row.length; ++i)
68 tds[i].set("html", row[i]);
72 insertRow: function(row) {
74 if (this.rows.has(url)) {
75 const tableRow = this.rows.get(url);
76 this.updateRow(tableRow, row);
79 // this.removeRow(id);
80 const tr = new Element("tr");
81 this.rows.set(url, tr);
82 for (let i = 0; i < row.length; ++i) {
83 const td = new Element("td");
84 td.set("html", row[i]);
87 tr.injectInside(this.table);
91 let current_hash = "";
93 let loadWebSeedsDataTimer;
94 const loadWebSeedsData = function() {
95 if ($("prop_webseeds").hasClass("invisible")
96 || $("propertiesPanel_collapseToggle").hasClass("panel-expand")) {
97 // Tab changed, don't do anything
100 const new_hash = torrentsTable.getCurrentTorrentID();
101 if (new_hash === "") {
102 wsTable.removeAllRows();
103 clearTimeout(loadWebSeedsDataTimer);
104 loadWebSeedsDataTimer = loadWebSeedsData.delay(10000);
107 if (new_hash !== current_hash) {
108 wsTable.removeAllRows();
109 current_hash = new_hash;
111 const url = new URI("api/v2/torrents/webseeds?hash=" + current_hash);
116 onFailure: function() {
117 $("error_div").set("html", "QBT_TR(qBittorrent client is not reachable)QBT_TR[CONTEXT=HttpServer]");
118 clearTimeout(loadWebSeedsDataTimer);
119 loadWebSeedsDataTimer = loadWebSeedsData.delay(20000);
121 onSuccess: function(webseeds) {
122 $("error_div").set("html", "");
124 // Update WebSeeds data
125 webseeds.each((webseed) => {
128 row[0] = webseed.url;
129 wsTable.insertRow(row);
133 wsTable.removeAllRows();
135 clearTimeout(loadWebSeedsDataTimer);
136 loadWebSeedsDataTimer = loadWebSeedsData.delay(10000);
141 const updateData = function() {
142 clearTimeout(loadWebSeedsDataTimer);
146 const wsTable = new webseedsDynTable();
147 wsTable.setup($("webseedsTable"));
152 Object.freeze(window.qBittorrent.PropWebseeds);