WebUI: unify comment format
[qBittorrent.git] / src / webui / www / private / scripts / prop-webseeds.js
blobdc15ba77696b5ce24b0b6cde925887c3f03eea2a
1 /*
2  * Bittorrent Client using Qt and libtorrent.
3  * Copyright (C) 2015  Diego de las Heras <ngosang@hotmail.es>
4  *
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.
9  *
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.
14  *
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.
18  *
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.
27  */
29 "use strict";
31 if (window.qBittorrent === undefined)
32     window.qBittorrent = {};
34 window.qBittorrent.PropWebseeds = (function() {
35     const exports = function() {
36         return {
37             updateData: updateData
38         };
39     };
41     const webseedsDynTable = new Class({
43         initialize: function() {},
45         setup: function(table) {
46             this.table = $(table);
47             this.rows = new Hash();
48         },
50         removeRow: function(url) {
51             if (this.rows.has(url)) {
52                 this.rows.get(url).destroy();
53                 this.rows.erase(url);
54                 return true;
55             }
56             return false;
57         },
59         removeAllRows: function() {
60             this.rows.each((tr, url) => {
61                 this.removeRow(url);
62             });
63         },
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]);
69             return true;
70         },
72         insertRow: function(row) {
73             const url = row[0];
74             if (this.rows.has(url)) {
75                 const tableRow = this.rows.get(url);
76                 this.updateRow(tableRow, row);
77                 return;
78             }
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]);
85                 td.injectInside(tr);
86             }
87             tr.injectInside(this.table);
88         },
89     });
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
98             return;
99         }
100         const new_hash = torrentsTable.getCurrentTorrentID();
101         if (new_hash === "") {
102             wsTable.removeAllRows();
103             clearTimeout(loadWebSeedsDataTimer);
104             loadWebSeedsDataTimer = loadWebSeedsData.delay(10000);
105             return;
106         }
107         if (new_hash !== current_hash) {
108             wsTable.removeAllRows();
109             current_hash = new_hash;
110         }
111         const url = new URI("api/v2/torrents/webseeds?hash=" + current_hash);
112         new Request.JSON({
113             url: url,
114             method: "get",
115             noCache: true,
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);
120             },
121             onSuccess: function(webseeds) {
122                 $("error_div").set("html", "");
123                 if (webseeds) {
124                     // Update WebSeeds data
125                     webseeds.each((webseed) => {
126                         const row = [];
127                         row.length = 1;
128                         row[0] = webseed.url;
129                         wsTable.insertRow(row);
130                     });
131                 }
132                 else {
133                     wsTable.removeAllRows();
134                 }
135                 clearTimeout(loadWebSeedsDataTimer);
136                 loadWebSeedsDataTimer = loadWebSeedsData.delay(10000);
137             }
138         }).send();
139     };
141     const updateData = function() {
142         clearTimeout(loadWebSeedsDataTimer);
143         loadWebSeedsData();
144     };
146     const wsTable = new webseedsDynTable();
147     wsTable.setup($("webseedsTable"));
149     return exports();
150 })();
152 Object.freeze(window.qBittorrent.PropWebseeds);