fx: asyncio.Event is not thread-safe; also the 'timeout' field was removed
This commit is contained in:
@@ -443,13 +443,13 @@ class FxThread(ThreadJob):
|
|||||||
self.ccy_combo = None
|
self.ccy_combo = None
|
||||||
self.hist_checkbox = None
|
self.hist_checkbox = None
|
||||||
self.cache_dir = os.path.join(config.path, 'cache')
|
self.cache_dir = os.path.join(config.path, 'cache')
|
||||||
self.trigger = asyncio.Event()
|
self._trigger = asyncio.Event()
|
||||||
self.trigger.set()
|
self._trigger.set()
|
||||||
self.set_exchange(self.config_exchange())
|
self.set_exchange(self.config_exchange())
|
||||||
make_dir(self.cache_dir)
|
make_dir(self.cache_dir)
|
||||||
|
|
||||||
def set_proxy(self, trigger_name, *args):
|
def set_proxy(self, trigger_name, *args):
|
||||||
self.trigger.set()
|
self._trigger.set()
|
||||||
|
|
||||||
def get_currencies(self, h):
|
def get_currencies(self, h):
|
||||||
d = get_exchanges_by_ccy(h)
|
d = get_exchanges_by_ccy(h)
|
||||||
@@ -471,11 +471,11 @@ class FxThread(ThreadJob):
|
|||||||
async def run(self):
|
async def run(self):
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
await asyncio.wait_for(self.trigger.wait(), 150)
|
await asyncio.wait_for(self._trigger.wait(), 150)
|
||||||
except concurrent.futures.TimeoutError:
|
except concurrent.futures.TimeoutError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
self.trigger.clear()
|
self._trigger.clear()
|
||||||
if self.is_enabled():
|
if self.is_enabled():
|
||||||
if self.show_history():
|
if self.show_history():
|
||||||
self.exchange.get_historical_rates(self.ccy, self.cache_dir)
|
self.exchange.get_historical_rates(self.ccy, self.cache_dir)
|
||||||
@@ -487,7 +487,7 @@ class FxThread(ThreadJob):
|
|||||||
|
|
||||||
def set_enabled(self, b):
|
def set_enabled(self, b):
|
||||||
self.config.set_key('use_exchange_rate', bool(b))
|
self.config.set_key('use_exchange_rate', bool(b))
|
||||||
self.trigger.set()
|
self.trigger_update()
|
||||||
|
|
||||||
def get_history_config(self):
|
def get_history_config(self):
|
||||||
return bool(self.config.get('history_rates'))
|
return bool(self.config.get('history_rates'))
|
||||||
@@ -520,9 +520,13 @@ class FxThread(ThreadJob):
|
|||||||
def set_currency(self, ccy):
|
def set_currency(self, ccy):
|
||||||
self.ccy = ccy
|
self.ccy = ccy
|
||||||
self.config.set_key('currency', ccy, True)
|
self.config.set_key('currency', ccy, True)
|
||||||
self.trigger.set() # Because self.ccy changes
|
self.trigger_update()
|
||||||
self.on_quotes()
|
self.on_quotes()
|
||||||
|
|
||||||
|
def trigger_update(self):
|
||||||
|
if self.network:
|
||||||
|
self.network.asyncio_loop.call_soon_threadsafe(self._trigger.set)
|
||||||
|
|
||||||
def set_exchange(self, name):
|
def set_exchange(self, name):
|
||||||
class_ = globals().get(name, BitcoinAverage)
|
class_ = globals().get(name, BitcoinAverage)
|
||||||
self.print_error("using exchange", name)
|
self.print_error("using exchange", name)
|
||||||
@@ -531,7 +535,7 @@ class FxThread(ThreadJob):
|
|||||||
self.exchange = class_(self.on_quotes, self.on_history)
|
self.exchange = class_(self.on_quotes, self.on_history)
|
||||||
# A new exchange means new fx quotes, initially empty. Force
|
# A new exchange means new fx quotes, initially empty. Force
|
||||||
# a quote refresh
|
# a quote refresh
|
||||||
self.trigger.set()
|
self.trigger_update()
|
||||||
self.exchange.read_historical_rates(self.ccy, self.cache_dir)
|
self.exchange.read_historical_rates(self.ccy, self.cache_dir)
|
||||||
|
|
||||||
def on_quotes(self):
|
def on_quotes(self):
|
||||||
|
|||||||
@@ -2962,8 +2962,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
|||||||
update_exchanges()
|
update_exchanges()
|
||||||
self.history_list.refresh_headers()
|
self.history_list.refresh_headers()
|
||||||
if self.fx.is_enabled() and checked:
|
if self.fx.is_enabled() and checked:
|
||||||
# reset timeout to get historical rates
|
self.fx.trigger_update()
|
||||||
self.fx.timeout = 0
|
|
||||||
update_history_capgains_cb()
|
update_history_capgains_cb()
|
||||||
|
|
||||||
def on_history_capgains(checked):
|
def on_history_capgains(checked):
|
||||||
@@ -3025,7 +3024,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
|||||||
d.exec_()
|
d.exec_()
|
||||||
|
|
||||||
if self.fx:
|
if self.fx:
|
||||||
self.fx.timeout = 0
|
self.fx.trigger_update()
|
||||||
|
|
||||||
self.alias_received_signal.disconnect(set_alias_color)
|
self.alias_received_signal.disconnect(set_alias_color)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user