Proper sorting of ip addresses in peers tab.
Try to show a proper string for clients that don't send utf-8
This commit is contained in:
parent
ed4389fe65
commit
1bf2339b0f
|
@ -240,13 +240,17 @@ class Torrent:
|
||||||
# We do not want to report peers that are half-connected
|
# We do not want to report peers that are half-connected
|
||||||
if peer.flags & peer.connecting:
|
if peer.flags & peer.connecting:
|
||||||
continue
|
continue
|
||||||
|
try:
|
||||||
|
client = str(peer.client).decode("utf-8")
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
client = str(peer.client).decode("latin-1")
|
||||||
|
|
||||||
ret.append({
|
ret.append({
|
||||||
"ip": "%s:%s" % (peer.ip[0], peer.ip[1]),
|
"ip": "%s:%s" % (peer.ip[0], peer.ip[1]),
|
||||||
"up_speed": peer.up_speed,
|
"up_speed": peer.up_speed,
|
||||||
"down_speed": peer.down_speed,
|
"down_speed": peer.down_speed,
|
||||||
"country": deluge.xmlrpclib.Binary(peer.country),
|
"country": deluge.xmlrpclib.Binary(peer.country),
|
||||||
"client": deluge.xmlrpclib.Binary(peer.client),
|
"client": client
|
||||||
})
|
})
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
|
@ -35,6 +35,7 @@ import gtk, gtk.glade
|
||||||
import os.path
|
import os.path
|
||||||
import cPickle
|
import cPickle
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
|
from itertools import izip
|
||||||
|
|
||||||
from deluge.ui.client import aclient as client
|
from deluge.ui.client import aclient as client
|
||||||
from deluge.configmanager import ConfigManager
|
from deluge.configmanager import ConfigManager
|
||||||
|
@ -56,7 +57,7 @@ class PeersTab:
|
||||||
glade = component.get("MainWindow").get_glade()
|
glade = component.get("MainWindow").get_glade()
|
||||||
self.listview = glade.get_widget("peers_listview")
|
self.listview = glade.get_widget("peers_listview")
|
||||||
# country pixbuf, ip, client, progress, progress, downspeed, upspeed, country code
|
# country pixbuf, ip, client, progress, progress, downspeed, upspeed, country code
|
||||||
self.liststore = gtk.ListStore(gtk.gdk.Pixbuf, str, str, int, int, str)
|
self.liststore = gtk.ListStore(gtk.gdk.Pixbuf, str, str, int, int, str, int)
|
||||||
self.cached_flag_pixbufs = {}
|
self.cached_flag_pixbufs = {}
|
||||||
|
|
||||||
# Country column
|
# Country column
|
||||||
|
@ -77,7 +78,7 @@ class PeersTab:
|
||||||
render = gtk.CellRendererText()
|
render = gtk.CellRendererText()
|
||||||
column.pack_start(render, False)
|
column.pack_start(render, False)
|
||||||
column.add_attribute(render, "text", 1)
|
column.add_attribute(render, "text", 1)
|
||||||
column.set_sort_column_id(1)
|
column.set_sort_column_id(6)
|
||||||
column.set_clickable(True)
|
column.set_clickable(True)
|
||||||
column.set_resizable(True)
|
column.set_resizable(True)
|
||||||
column.set_expand(False)
|
column.set_expand(False)
|
||||||
|
@ -222,16 +223,21 @@ class PeersTab:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return self.cached_flag_pixbufs[country]
|
return self.cached_flag_pixbufs[country]
|
||||||
|
|
||||||
def _on_get_torrent_status(self, status):
|
def _on_get_torrent_status(self, status):
|
||||||
self.liststore.clear()
|
self.liststore.clear()
|
||||||
for peer in status["peers"]:
|
for peer in status["peers"]:
|
||||||
|
# Create an int IP address for sorting purposes
|
||||||
|
ip_int = sum([int(byte) << shift
|
||||||
|
for byte, shift in izip(peer["ip"].split(":")[0].split("."), (24, 16, 8, 0))])
|
||||||
self.liststore.append([
|
self.liststore.append([
|
||||||
self.get_flag_pixbuf(peer["country"]),
|
self.get_flag_pixbuf(peer["country"]),
|
||||||
peer["ip"],
|
peer["ip"],
|
||||||
peer["client"],
|
peer["client"],
|
||||||
peer["down_speed"],
|
peer["down_speed"],
|
||||||
peer["up_speed"],
|
peer["up_speed"],
|
||||||
peer["country"]])
|
peer["country"],
|
||||||
|
ip_int])
|
||||||
|
|
||||||
def clear(self):
|
def clear(self):
|
||||||
self.liststore.clear()
|
self.liststore.clear()
|
||||||
|
|
Loading…
Reference in New Issue