From 2e2851dc13d73352530dd4495c7e05603b2e520d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 23:38:38 +0200 Subject: Adding upstream version 2.1.2~dev0+20240219. Signed-off-by: Daniel Baumann --- deluge/ui/web/js/deluge-all/details/PeersTab.js | 166 ++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 deluge/ui/web/js/deluge-all/details/PeersTab.js (limited to 'deluge/ui/web/js/deluge-all/details/PeersTab.js') diff --git a/deluge/ui/web/js/deluge-all/details/PeersTab.js b/deluge/ui/web/js/deluge-all/details/PeersTab.js new file mode 100644 index 0000000..a191963 --- /dev/null +++ b/deluge/ui/web/js/deluge-all/details/PeersTab.js @@ -0,0 +1,166 @@ +/** + * Deluge.details.PeersTab.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with + * the additional special exception to link portions of this program with the OpenSSL library. + * See LICENSE for more details. + */ + +(function () { + function flagRenderer(value) { + if (!value.replace(' ', '').replace(' ', '')) { + return ''; + } + return String.format( + '{1}', + deluge.config.base, + value + ); + } + function peerAddressRenderer(value, p, record) { + var seed = + record.data['seed'] == 1024 ? 'x-deluge-seed' : 'x-deluge-peer'; + // Modify display of IPv6 to include brackets + var peer_ip = value.split(':'); + if (peer_ip.length > 2) { + var port = peer_ip.pop(); + var ip = peer_ip.join(':'); + value = '[' + ip + ']:' + port; + } + return String.format('
{1}
', seed, value); + } + function peerProgressRenderer(value) { + var progress = (value * 100).toFixed(0); + return Deluge.progressBar(progress, this.width - 8, progress + '%'); + } + + Deluge.details.PeersTab = Ext.extend(Ext.grid.GridPanel, { + // fast way to figure out if we have a peer already. + peers: {}, + + constructor: function (config) { + config = Ext.apply( + { + title: _('Peers'), + cls: 'x-deluge-peers', + store: new Ext.data.Store({ + reader: new Ext.data.JsonReader( + { + idProperty: 'ip', + root: 'peers', + }, + Deluge.data.Peer + ), + }), + columns: [ + { + header: ' ', + width: 30, + sortable: true, + renderer: flagRenderer, + dataIndex: 'country', + }, + { + header: _('Address'), + width: 125, + sortable: true, + renderer: peerAddressRenderer, + dataIndex: 'ip', + }, + { + header: _('Client'), + width: 125, + sortable: true, + renderer: 'htmlEncode', + dataIndex: 'client', + }, + { + header: _('Progress'), + width: 150, + sortable: true, + renderer: peerProgressRenderer, + dataIndex: 'progress', + }, + { + header: _('Down Speed'), + width: 100, + sortable: true, + renderer: fspeed, + dataIndex: 'down_speed', + }, + { + header: _('Up Speed'), + width: 100, + sortable: true, + renderer: fspeed, + dataIndex: 'up_speed', + }, + ], + stripeRows: true, + deferredRender: false, + autoScroll: true, + }, + config + ); + Deluge.details.PeersTab.superclass.constructor.call(this, config); + }, + + clear: function () { + this.getStore().removeAll(); + this.peers = {}; + }, + + update: function (torrentId) { + deluge.client.web.get_torrent_status(torrentId, Deluge.Keys.Peers, { + success: this.onRequestComplete, + scope: this, + }); + }, + + onRequestComplete: function (torrent, options) { + if (!torrent) return; + + var store = this.getStore(); + var newPeers = []; + var addresses = {}; + + // Go through the peers updating and creating peer records + Ext.each( + torrent.peers, + function (peer) { + if (this.peers[peer.ip]) { + var record = store.getById(peer.ip); + record.beginEdit(); + for (var k in peer) { + if (record.get(k) != peer[k]) { + record.set(k, peer[k]); + } + } + record.endEdit(); + } else { + this.peers[peer.ip] = 1; + newPeers.push(new Deluge.data.Peer(peer, peer.ip)); + } + addresses[peer.ip] = 1; + }, + this + ); + store.add(newPeers); + + // Remove any peers that should not be left in the store. + store.each(function (record) { + if (!addresses[record.id]) { + store.remove(record); + delete this.peers[record.id]; + } + }, this); + store.commitChanges(); + + var sortState = store.getSortState(); + if (!sortState) return; + store.sort(sortState.field, sortState.direction); + }, + }); +})(); -- cgit v1.2.3