tMerge pull request #603 from wozz/exchange-fix-gui-hang - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit ad6a9084e5bc3a202ee6292c495160ecacdfcd1c DIR parent 746225c05d0cce937a72caed025fe5c073b552f0 HTML Author: ThomasV <thomasv1@gmx.de> Date: Wed, 5 Mar 2014 08:56:34 +0100 Merge pull request #603 from wozz/exchange-fix-gui-hang non blocking exchange rate API calls Diffstat: M plugins/exchange_rate.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) --- DIR diff --git a/plugins/exchange_rate.py b/plugins/exchange_rate.py t@@ -32,6 +32,7 @@ class Exchanger(threading.Thread): self.parent = parent self.quote_currencies = None self.lock = threading.Lock() + self.query_rates = threading.Event() self.use_exchange = self.parent.config.get('use_exchange', "Blockchain") self.parent.exchanges = EXCHANGES self.parent.currencies = ["EUR","GBP","USD"] t@@ -94,8 +95,9 @@ class Exchanger(threading.Thread): def run(self): self.is_running = True while self.is_running: + self.query_rates.clear() self.update_rate() - time.sleep(150) + self.query_rates.wait(150) def update_cd(self): t@@ -379,7 +381,10 @@ class Plugin(BasePlugin): ok_button = QPushButton(_("OK")) def on_change(x): - cur_request = str(self.currencies[x]) + try: + cur_request = str(self.currencies[x]) + except Exception: + return if cur_request != self.config.get('currency', "EUR"): self.config.set_key('currency', cur_request, True) if cur_request == "USD" and self.config.get('use_exchange', "Blockchain") == "CoinDesk": t@@ -397,7 +402,9 @@ class Plugin(BasePlugin): cur_request = str(self.exchanges[x]) if cur_request != self.config.get('use_exchange', "Blockchain"): self.config.set_key('use_exchange', cur_request, True) - self.exchanger.update_rate() + self.currencies = [] + combo.clear() + self.exchanger.query_rates.set() if cur_request == "CoinDesk": if self.config.get('currency', "EUR") == "USD": hist_checkbox.setEnabled(True) t@@ -459,7 +466,7 @@ class Plugin(BasePlugin): combo.currentIndexChanged.connect(on_change) combo_ex.currentIndexChanged.connect(on_change_ex) hist_checkbox.stateChanged.connect(on_change_hist) - combo.connect(d, SIGNAL('refresh_currencies_combo()'), lambda: set_currencies(combo)) + combo.connect(self.win, SIGNAL('refresh_currencies_combo()'), lambda: set_currencies(combo)) combo_ex.connect(d, SIGNAL('refresh_exchanges_combo()'), lambda: set_exchanges(combo_ex)) ok_button.clicked.connect(lambda: ok_clicked()) layout.addWidget(combo,1,1)