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 window.qBittorrent ??= {};
32 window.qBittorrent.PropWebseeds ??= (() => {
33 const exports = () => {
35 updateData: updateData
39 const webseedsDynTable = new Class({
41 initialize: function() {},
43 setup: function(table) {
44 this.table = $(table);
45 this.rows = new Hash();
48 removeRow: function(url) {
49 if (this.rows.has(url)) {
50 this.rows.get(url).destroy();
57 removeAllRows: function() {
58 this.rows.each((tr, url) => {
63 updateRow: function(tr, row) {
64 const tds = tr.getElements("td");
65 for (let i = 0; i < row.length; ++i)
66 tds[i].textContent = row[i];
70 insertRow: function(row) {
72 if (this.rows.has(url)) {
73 const tableRow = this.rows.get(url);
74 this.updateRow(tableRow, row);
77 // this.removeRow(id);
78 const tr = new Element("tr");
79 this.rows.set(url, tr);
80 for (let i = 0; i < row.length; ++i) {
81 const td = document.createElement("td");
82 td.textContent = row[i];
85 tr.injectInside(this.table);
89 let current_hash = "";
91 let loadWebSeedsDataTimer = -1;
92 const loadWebSeedsData = function() {
93 if ($("propWebSeeds").hasClass("invisible")
94 || $("propertiesPanel_collapseToggle").hasClass("panel-expand")) {
95 // Tab changed, don't do anything
98 const new_hash = torrentsTable.getCurrentTorrentID();
99 if (new_hash === "") {
100 wsTable.removeAllRows();
101 clearTimeout(loadWebSeedsDataTimer);
102 loadWebSeedsDataTimer = loadWebSeedsData.delay(10000);
105 if (new_hash !== current_hash) {
106 wsTable.removeAllRows();
107 current_hash = new_hash;
109 const url = new URI("api/v2/torrents/webseeds?hash=" + current_hash);
114 onFailure: function() {
115 $("error_div").textContent = "QBT_TR(qBittorrent client is not reachable)QBT_TR[CONTEXT=HttpServer]";
116 clearTimeout(loadWebSeedsDataTimer);
117 loadWebSeedsDataTimer = loadWebSeedsData.delay(20000);
119 onSuccess: function(webseeds) {
120 $("error_div").textContent = "";
122 // Update WebSeeds data
123 webseeds.each((webseed) => {
126 row[0] = webseed.url;
127 wsTable.insertRow(row);
131 wsTable.removeAllRows();
133 clearTimeout(loadWebSeedsDataTimer);
134 loadWebSeedsDataTimer = loadWebSeedsData.delay(10000);
139 const updateData = function() {
140 clearTimeout(loadWebSeedsDataTimer);
141 loadWebSeedsDataTimer = -1;
145 const wsTable = new webseedsDynTable();
146 wsTable.setup($("webseedsTable"));
150 Object.freeze(window.qBittorrent.PropWebseeds);