Add regex toggle for WebUI torrent filtering
[qBittorrent.git] / src / webui / www / private / scripts / prop-webseeds.js
blobcadd8ab9ef162bb1762e491b94d9bdd2e3d3f280
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 = {};
35 window.qBittorrent.PropWebseeds = (function() {
36     const exports = function() {
37         return {
38             updateData: updateData
39         };
40     };
42     const webseedsDynTable = new Class({
44         initialize: function() {},
46         setup: function(table) {
47             this.table = $(table);
48             this.rows = new Hash();
49         },
51         removeRow: function(url) {
52             if (this.rows.has(url)) {
53                 this.rows.get(url).destroy();
54                 this.rows.erase(url);
55                 return true;
56             }
57             return false;
58         },
60         removeAllRows: function() {
61             this.rows.each(function(tr, url) {
62                 this.removeRow(url);
63             }.bind(this));
64         },
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]);
70             }
71             return true;
72         },
74         insertRow: function(row) {
75             const url = row[0];
76             if (this.rows.has(url)) {
77                 const tableRow = this.rows.get(url);
78                 this.updateRow(tableRow, row);
79                 return;
80             }
81             //this.removeRow(id);
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]);
87                 td.injectInside(tr);
88             }
89             tr.injectInside(this.table);
90         },
91     });
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
100             return;
101         }
102         const new_hash = torrentsTable.getCurrentTorrentID();
103         if (new_hash === "") {
104             wsTable.removeAllRows();
105             clearTimeout(loadWebSeedsDataTimer);
106             loadWebSeedsDataTimer = loadWebSeedsData.delay(10000);
107             return;
108         }
109         if (new_hash != current_hash) {
110             wsTable.removeAllRows();
111             current_hash = new_hash;
112         }
113         const url = new URI('api/v2/torrents/webseeds?hash=' + current_hash);
114         new Request.JSON({
115             url: url,
116             method: 'get',
117             noCache: true,
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);
122             },
123             onSuccess: function(webseeds) {
124                 $('error_div').set('html', '');
125                 if (webseeds) {
126                     // Update WebSeeds data
127                     webseeds.each(function(webseed) {
128                         const row = [];
129                         row.length = 1;
130                         row[0] = webseed.url;
131                         wsTable.insertRow(row);
132                     });
133                 }
134                 else {
135                     wsTable.removeAllRows();
136                 }
137                 clearTimeout(loadWebSeedsDataTimer);
138                 loadWebSeedsDataTimer = loadWebSeedsData.delay(10000);
139             }
140         }).send();
141     };
143     const updateData = function() {
144         clearTimeout(loadWebSeedsDataTimer);
145         loadWebSeedsData();
146     };
148     const wsTable = new webseedsDynTable();
149     wsTable.setup($('webseedsTable'));
151     return exports();
152 })();
154 Object.freeze(window.qBittorrent.PropWebseeds);