mirror of
https://github.com/codex-storage/deluge.git
synced 2025-02-26 18:10:43 +00:00
fix updating the peers grid
This commit is contained in:
parent
17903c78d4
commit
e939f17654
@ -34,7 +34,8 @@ Copyright:
|
|||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
function flagRenderer(value) {
|
function flagRenderer(value) {
|
||||||
return String.format('<img src="/flag/{0}" />', value);
|
if (!value) return '';
|
||||||
|
return String.format('<img src="flag/{0}" />', value);
|
||||||
}
|
}
|
||||||
function peerAddressRenderer(value, p, record) {
|
function peerAddressRenderer(value, p, record) {
|
||||||
var seed = (record.data['seed'] == 1024) ? 'x-deluge-seed' : 'x-deluge-peer'
|
var seed = (record.data['seed'] == 1024) ? 'x-deluge-seed' : 'x-deluge-peer'
|
||||||
@ -44,28 +45,22 @@ Copyright:
|
|||||||
var progress = (value * 100).toFixed(0);
|
var progress = (value * 100).toFixed(0);
|
||||||
return Deluge.progressBar(progress, this.width - 8, progress + '%');
|
return Deluge.progressBar(progress, this.width - 8, progress + '%');
|
||||||
}
|
}
|
||||||
function sort_address(value) {
|
|
||||||
var d = value.match(/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\:(\d+)/);
|
|
||||||
return ((((((+d[1])*256)+(+d[2]))*256)+(+d[3]))*256)+(+d[4]);
|
|
||||||
}
|
|
||||||
|
|
||||||
Deluge.details.PeersTab = Ext.extend(Ext.grid.GridPanel, {
|
Deluge.details.PeersTab = Ext.extend(Ext.grid.GridPanel, {
|
||||||
|
|
||||||
|
// fast way to figure out if we have a peer already.
|
||||||
|
peers: {},
|
||||||
|
|
||||||
constructor: function(config) {
|
constructor: function(config) {
|
||||||
config = Ext.apply({
|
config = Ext.apply({
|
||||||
title: _('Peers'),
|
title: _('Peers'),
|
||||||
cls: 'x-deluge-peers',
|
cls: 'x-deluge-peers',
|
||||||
store: new Ext.data.SimpleStore({
|
store: new Ext.data.Store({
|
||||||
fields: [
|
reader: new Ext.data.JsonReader({
|
||||||
{name: 'country'},
|
idProperty: 'ip',
|
||||||
{name: 'address', sortType: sort_address},
|
root: 'peers',
|
||||||
{name: 'client'},
|
|
||||||
{name: 'progress', type: 'float'},
|
}, Deluge.data.Peer)
|
||||||
{name: 'downspeed', type: 'int'},
|
|
||||||
{name: 'upspeed', type: 'int'},
|
|
||||||
{name: 'seed', type: 'int'}
|
|
||||||
],
|
|
||||||
id: 0
|
|
||||||
}),
|
}),
|
||||||
columns: [{
|
columns: [{
|
||||||
header: ' ',
|
header: ' ',
|
||||||
@ -78,7 +73,7 @@ Copyright:
|
|||||||
width: 125,
|
width: 125,
|
||||||
sortable: true,
|
sortable: true,
|
||||||
renderer: peerAddressRenderer,
|
renderer: peerAddressRenderer,
|
||||||
dataIndex: 'address'
|
dataIndex: 'ip'
|
||||||
}, {
|
}, {
|
||||||
header: 'Client',
|
header: 'Client',
|
||||||
width: 125,
|
width: 125,
|
||||||
@ -96,13 +91,13 @@ Copyright:
|
|||||||
width: 100,
|
width: 100,
|
||||||
sortable: true,
|
sortable: true,
|
||||||
renderer: fspeed,
|
renderer: fspeed,
|
||||||
dataIndex: 'downspeed'
|
dataIndex: 'down_speed'
|
||||||
}, {
|
}, {
|
||||||
header: 'Up Speed',
|
header: 'Up Speed',
|
||||||
width: 100,
|
width: 100,
|
||||||
sortable: true,
|
sortable: true,
|
||||||
renderer: fspeed,
|
renderer: fspeed,
|
||||||
dataIndex: 'upspeed'
|
dataIndex: 'up_speed'
|
||||||
}],
|
}],
|
||||||
stripeRows: true,
|
stripeRows: true,
|
||||||
deferredRender:false,
|
deferredRender:false,
|
||||||
@ -111,12 +106,9 @@ Copyright:
|
|||||||
Deluge.details.PeersTab.superclass.constructor.call(this, config);
|
Deluge.details.PeersTab.superclass.constructor.call(this, config);
|
||||||
},
|
},
|
||||||
|
|
||||||
onRender: function(ct, position) {
|
|
||||||
Deluge.details.PeersTab.superclass.onRender.call(this, ct, position);
|
|
||||||
},
|
|
||||||
|
|
||||||
clear: function() {
|
clear: function() {
|
||||||
this.getStore().loadData([]);
|
this.getStore().removeAll();
|
||||||
|
this.peers = {};
|
||||||
},
|
},
|
||||||
|
|
||||||
update: function(torrentId) {
|
update: function(torrentId) {
|
||||||
@ -128,11 +120,34 @@ Copyright:
|
|||||||
|
|
||||||
onRequestComplete: function(torrent, options) {
|
onRequestComplete: function(torrent, options) {
|
||||||
if (!torrent) return;
|
if (!torrent) return;
|
||||||
var peers = new Array();
|
|
||||||
|
var store = this.getStore();
|
||||||
|
var newPeers = [];
|
||||||
|
var addresses = {};
|
||||||
|
|
||||||
|
// Go through the peers updating and creating peer records
|
||||||
Ext.each(torrent.peers, function(peer) {
|
Ext.each(torrent.peers, function(peer) {
|
||||||
peers.push([peer.country, peer.ip, peer.client, peer.progress, peer.down_speed, peer.up_speed, peer.seed]);
|
if (this.peers[peer.ip]) {
|
||||||
|
} else {
|
||||||
|
this.peers[peer.ip] = 1;
|
||||||
|
newPeers.push(new Deluge.data.Peer(peer, peer.ip));
|
||||||
|
}
|
||||||
|
addresses[peer.ip] = 1;
|
||||||
}, this);
|
}, this);
|
||||||
this.getStore().loadData(peers);
|
store.add(newPeers);
|
||||||
|
|
||||||
|
// 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();
|
||||||
|
|
||||||
|
var sortState = store.getSortState();
|
||||||
|
if (!sortState) return;
|
||||||
|
store.sort(sortState.field, sortState.direction);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
deluge.details.add(new Deluge.details.PeersTab());
|
deluge.details.add(new Deluge.details.PeersTab());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user