summaryrefslogtreecommitdiffstats
path: root/deluge/ui/web/js/deluge-all/details/PeersTab.js
diff options
context:
space:
mode:
Diffstat (limited to 'deluge/ui/web/js/deluge-all/details/PeersTab.js')
-rw-r--r--deluge/ui/web/js/deluge-all/details/PeersTab.js204
1 files changed, 83 insertions, 121 deletions
diff --git a/deluge/ui/web/js/deluge-all/details/PeersTab.js b/deluge/ui/web/js/deluge-all/details/PeersTab.js
index d0980dd40..4c1f24393 100644
--- a/deluge/ui/web/js/deluge-all/details/PeersTab.js
+++ b/deluge/ui/web/js/deluge-all/details/PeersTab.js
@@ -30,131 +30,93 @@
* statement from all source files in the program, then also delete it here.
*/
-(function() {
- function flagRenderer(value) {
- if (!value.replace(' ', '').replace(' ', '')){
- return '';
- }
- return String.format('<img src="flag/{0}" />', value);
- }
- function peerAddressRenderer(value, p, record) {
- var seed = (record.data['seed'] == 1024) ? 'x-deluge-seed' : 'x-deluge-peer';
- if (peer_ip.length > 2) {
- var port = peer_ip.pop();
- var ip = peer_ip.join(":");
- value = "[" + ip + "]:" + port;
- }
- return String.format('<div class="{0}">{1}</div>', seed, value);
- }
- function peerProgressRenderer(value) {
- var progress = (value * 100).toFixed(0);
- return Deluge.progressBar(progress, this.width - 8, progress + '%');
- }
-
- Ext.define('Deluge.details.PeersTab', {
- extend: 'Ext.grid.Panel',
- title: _('Peers'),
- cls: 'x-deluge-peers',
-
- store: Ext.create('Ext.data.Store', {
- model: 'Deluge.data.Peer'
- }),
-
- columns: [{
- header: '&nbsp;',
- 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: function(v) { return fplain(v) },
- dataIndex: 'client'
- }, {
- header: 'Progress',
- width: 150,
- sortable: true,
- renderer: peerProgressRenderer,
- dataIndex: 'progress'
- }, {
- header: 'Down Speed',
- width: 100,
- sortable: true,
- renderer: function(v) { return fspeed(v) },
- dataIndex: 'down_speed'
- }, {
- header: 'Up Speed',
- width: 100,
- sortable: true,
- renderer: function(v) { return fspeed(v) },
- dataIndex: 'up_speed'
- }],
+Ext.define('Deluge.details.PeersTab', {
+ extend: 'Ext.grid.Panel',
+ title: _('Peers'),
+ cls: 'x-deluge-peers',
+ viewConfig: {
+ loadMask: false,
+ },
+ invalidateScrollerOnRefresh: false,
- stripeRows: true,
- deferredRender: false,
- autoScroll: true,
-
- // fast way to figure out if we have a peer already.
- peers: {},
-
- 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
- });
- },
+ store: {
+ model: 'Deluge.data.Peer',
+ proxy: {
+ type: 'ajax',
+ url: 'peers/',
+ reader: {
+ type: 'json',
+ root: 'peers'
+ }
+ }
+ },
- onRequestComplete: function(torrent, options) {
- if (!torrent) return;
+ columns: [{
+ text: '&nbsp;',
+ dataIndex: 'country',
+ width: 30,
+ sortable: true,
+ renderer: function(v) {
+ if (!v.replace(' ', '').replace(' ', '')) {
+ return '';
+ }
+ return Ext.String.format('<img src="flag/{0}" />', v);
+ }
+ }, {
+ text: 'Address',
+ dataIndex: 'ip',
+ width: 125,
+ sortable: true,
+ renderer: function(v, p, r) {
+ var cls = (r.data['seed'] == 1024) ? 'x-deluge-seed': 'x-deluge-peer';
+ return Ext.String.format('<div class="{0}">{1}</div>', cls, v);
+ }
+ }, {
+ text: 'Client',
+ dataIndex: 'client',
+ width: 125,
+ sortable: true,
+ renderer: function(v) { return fplain(v) }
+ }, {
+ text: 'Progress',
+ dataIndex: 'progress',
+ width: 150,
+ sortable: true,
+ renderer: function(v) {
+ var progress = (v * 100).toFixed(0);
+ return Deluge.progressBar(progress, this.width - 8, progress + '%');
+ }
+ }, {
+ text: 'Down Speed',
+ dataIndex: 'down_speed',
+ width: 100,
+ sortable: true,
+ renderer: function(v) { return fspeed(v) }
+ }, {
+ text: 'Up Speed',
+ dataIndex: 'up_speed',
+ width: 100,
+ sortable: true,
+ renderer: function(v) { return fspeed(v) }
+ }],
- var store = this.getStore();
- var newPeers = [];
- var addresses = {};
+ autoScroll: true,
+ deferredRender: false,
+ stripeRows: true,
- // 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);
+ clear: function() {
+ this.getStore().removeAll();
+ },
- // Remove any peers that shouldn't be left in the store
- store.each(function(record) {
- if (!addresses[record.id]) {
- store.remove(record);
- delete this.peers[record.id];
- }
- }, this);
- store.commitChanges();
+ update: function(torrentId) {
+ var store = this.getStore(),
+ view = this.getView();
- var sortState = store.getSortState();
- if (!sortState) return;
- store.sort(sortState.field, sortState.direction);
+ if (torrentId != this.torrentId) {
+ store.removeAll();
+ store.getProxy().url = 'peers/' + torrentId;
+ this.torrentId = torrentId;
}
- });
-})();
+ store.load();
+ }
+});