From 0616df32921ca0f346dd0fd3782413e6d91806a5 Mon Sep 17 00:00:00 2001 From: luxick Date: Fri, 17 Feb 2017 11:31:29 +0100 Subject: [PATCH] Performance: card search in separate thread --- mtg-collector/search.py | 30 +++++++++++++++++++----------- mtg-collector/util.py | 6 +++--- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/mtg-collector/search.py b/mtg-collector/search.py index 6c99769..ed2c833 100644 --- a/mtg-collector/search.py +++ b/mtg-collector/search.py @@ -2,9 +2,13 @@ import gi from gi.repository import Pango import util import details + gi.require_version('Gtk', '3.0') -from gi.repository import Gtk, GdkPixbuf +from gi.repository import Gtk, GdkPixbuf, GObject from mtgsdk import Card +import threading + +GObject.threads_init() class SearchView(Gtk.Grid): @@ -12,6 +16,8 @@ class SearchView(Gtk.Grid): Gtk.Grid.__init__(self) self.set_column_spacing(5) + self.cancelSearch = False + # Search Box self.searchbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5, margin_end=5, margin_start=5, margin_top=5, margin_bottom=5) @@ -36,8 +42,7 @@ class SearchView(Gtk.Grid): self.filterBox.add(self.testRow) - - #Card List + # Card List self.searchresults = Gtk.ScrolledWindow(hexpand=True, vexpand=True) self.searchresults.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) @@ -87,8 +92,6 @@ class SearchView(Gtk.Grid): self.attach(Gtk.VSeparator(), 1, 0, 1, 2) self.attach(Gtk.VSeparator(), 3, 0, 1, 2) - - self.selection = self.list.get_selection() self.selection.connect("changed", self.on_card_selected) @@ -96,16 +99,23 @@ class SearchView(Gtk.Grid): self.details.rulings.set_visible(False) def online_search_clicked(self, button): + self.store.clear() + self.searchEntry.set_editable(False) + self.searchbutton.set_sensitive(False) + + threading.Thread(target=self.load_cards).start() + + def load_cards(self): + term = self.searchEntry.get_text() if not term == "": print("Search for \"" + term + "\" online. \n") self.cards = Card.where(name=term).where(pageSize=50).where(page=1).all() - self.store.clear() for card in self.cards: if card.multiverse_id is not None: print("Found: " + card.name - + " (" + card.multiverse_id.__str__() + ")") + + " (" + card.multiverse_id.__str__() + ")") self.store.append([card.multiverse_id, util.load_card_image(card, 63 * 2, 88 * 2), @@ -114,6 +124,8 @@ class SearchView(Gtk.Grid): util.create_mana_icons(card.mana_cost)]) print("\n") util.reload_image_cache() + self.searchEntry.set_editable(True) + self.searchbutton.set_sensitive(True) def on_card_selected(self, selection): (model, pathlist) = selection.get_selected_rows() @@ -127,7 +139,3 @@ class SearchView(Gtk.Grid): selected_card = card if selected_card is not None: self.details.set_card_detail(selected_card) - - - - diff --git a/mtg-collector/util.py b/mtg-collector/util.py index 6e4674f..4ad1e75 100644 --- a/mtg-collector/util.py +++ b/mtg-collector/util.py @@ -39,7 +39,7 @@ def reload_image_cache(): def load_dummy_image(sizex, sizey): return GdkPixbuf.Pixbuf.new_from_file_at_size(os.path.dirname(__file__) + '/resources/images/dummy.jpg', sizex, sizey) -def load_card_image_online(card): +def load_card_image_online(card, sizex, sizey): url = card.image_url if url is None: print("No Image URL provided") @@ -47,7 +47,7 @@ def load_card_image_online(card): filename = config.cachepath + card.multiverse_id.__str__() + ".PNG" print("Loading image from: " + url) response = request.urlretrieve(url, filename) - return GdkPixbuf.Pixbuf.new_from_file_at_size(filename, 63 * 2, 88 * 2) + return GdkPixbuf.Pixbuf.new_from_file_at_size(filename, sizex, sizey) def load_card_image(card, sizex, sizey): @@ -59,7 +59,7 @@ def load_card_image(card, sizex, sizey): return GdkPixbuf.Pixbuf.new_from_file_at_size(image.filename, sizex, sizey) # No file in local cache found - return load_card_image_online(card) + return load_card_image_online(card, sizex, sizey) def create_mana_icons(mana_string):