From d4bbece86e4a35cb2de68329f855428b295f37bb Mon Sep 17 00:00:00 2001 From: Martijn Voncken Date: Tue, 21 Oct 2008 18:57:13 +0000 Subject: [PATCH] use cache for async tracker images --- deluge/tracker_icons.py | 16 +++++++++++----- deluge/ui/gtkui/filtertreeview.py | 7 ++++--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/deluge/tracker_icons.py b/deluge/tracker_icons.py index 827be7c68..d35d0e5cf 100644 --- a/deluge/tracker_icons.py +++ b/deluge/tracker_icons.py @@ -89,16 +89,22 @@ class TrackerIcons(object): gobject.idle_add(callback, filename) def get_async(self, tracker_host, callback): - threading.Thread( - target=self. _fetch_icon_thread, - args=(tracker_host, callback)).start() + if tracker_host in self.images: + if callback: + callback(self.images[tracker_host]) + else: + threading.Thread(target=self. _fetch_icon_thread, + args=(tracker_host, callback)).start() def get(self, tracker_host): """ returns None if the icon is not fetched(yet) or not fond. """ - if not tracker_host in self.images: + if tracker_host in self.images: + return self.images[tracker_host] + else: self.images[tracker_host] = None self.get_async(tracker_host, None) - return self.images[tracker_host] + return None + diff --git a/deluge/ui/gtkui/filtertreeview.py b/deluge/ui/gtkui/filtertreeview.py index b87cc4753..59d8b1da3 100644 --- a/deluge/ui/gtkui/filtertreeview.py +++ b/deluge/ui/gtkui/filtertreeview.py @@ -193,6 +193,10 @@ class FilterTreeView(component.Component): label = _(value) row = self.treestore.append(self.cat_nodes[cat],[cat, value, label, count , pix, True]) self.filters[(cat, value)] = row + + if cat == "tracker_host": + self.tracker_icons.get_async(value, lambda filename: self.set_row_image(cat, value, filename)) + self.treestore.set_value(row, FILTER_COLUMN, True) return row @@ -230,9 +234,6 @@ class FilterTreeView(component.Component): pix = STATE_PIX.get(value, "dht") return gtk.gdk.pixbuf_new_from_file(deluge.common.get_pixmap("%s16.png" % pix)) - elif cat == "tracker_host": - self.tracker_icons.get_async(value, lambda filename: self.set_row_image(cat, value, filename)) - return None def set_row_image(self, cat, value, filename):