tfix status bar display - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit a0a67221bb4c3e072b410d63d8a2ea28bff75942 DIR parent d6d9b5f1d1b51cd2beae0cef2fc381a0ef22f2fd HTML Author: ThomasV <thomasv@gitorious> Date: Fri, 23 Mar 2012 17:46:48 +0100 fix status bar display Diffstat: M client/interface.py | 31 +++++++++++++++---------------- M client/wallet.py | 13 ++++++++----- 2 files changed, 23 insertions(+), 21 deletions(-) --- DIR diff --git a/client/interface.py b/client/interface.py t@@ -25,18 +25,14 @@ DEFAULT_SERVERS = ['electrum.bitcoins.sk','ecdsa.org','electrum.novit.ro'] # li class Interface: - def __init__(self, host, port, address_callback=None, history_callback=None, newblock_callback=None, sync_cb=None): + def __init__(self, host, port): self.host = host self.port = port - self.sync_callback = sync_cb - self.address_callback = address_callback - self.history_callback = history_callback - self.newblock_callback = newblock_callback self.servers = [] # actual list from IRC self.rtime = 0 - self.is_connected = False + self.is_connected = True #only asynchrnous self.addresses_waiting_for_status = [] t@@ -50,7 +46,7 @@ class Interface: def is_up_to_date(self): - return not ( self.addresses_waiting_for_status or self.addresses_waiting_for_history ) + return self.responses.empty() and not ( self.addresses_waiting_for_status or self.addresses_waiting_for_history ) def send_tx(self, data): t@@ -75,18 +71,20 @@ class Interface: if error: print "received error:", c, method, params else: - #self.handle_response(method, params, result) - if method == 'address.subscribe': - addr = params[-1] - if addr in self.addresses_waiting_for_status: - self.addresses_waiting_for_status.remove(addr) - elif method == 'address.get_history': - addr = params[0] - if addr in self.addresses_waiting_for_history: - self.addresses_waiting_for_history.remove(addr) + self.update_waiting_lists(method, params) self.responses.put({'method':method, 'params':params, 'result':result}) + def update_waiting_lists(self, method, params): + if method == 'address.subscribe': + addr = params[-1] + if addr in self.addresses_waiting_for_status: + self.addresses_waiting_for_status.remove(addr) + elif method == 'address.get_history': + addr = params[0] + if addr in self.addresses_waiting_for_history: + self.addresses_waiting_for_history.remove(addr) + def subscribe(self, addresses): messages = [] t@@ -215,6 +213,7 @@ class NativeInterface(PollingInterface): if cmd == 'new_session': self.session_id, self.message = ast.literal_eval( out ) else: + self.update_waiting_lists(method, params) self.responses.put({'method':method, 'params':params, 'result':out}) DIR diff --git a/client/wallet.py b/client/wallet.py t@@ -950,12 +950,12 @@ class Wallet: if blocks == -1: raise BaseException("session not found") self.blocks = int(blocks) if changed_addresses: - self.is_up_to_date = False + #self.is_up_to_date = False self.was_updated = True for addr, status in changed_addresses.items(): self.receive_status_callback(addr, status) - else: - self.is_up_to_date = True + #else: + # self.is_up_to_date = True elif method == 'server.peers': #print "Received server list: ", result t@@ -984,13 +984,16 @@ class Wallet: else: print "unknown message:", method, params, result + def update(self): self.up_to_date_event.wait() + def run(self): while self.interface.is_connected: - new = self.synchronize() - if self.interface.is_up_to_date() and not new: + # the interface should use an input queue for requests so that we don't care about synchronous + is_new = self.synchronize() # in synchronous mode, this puts new responses in the queue + if self.interface.is_up_to_date() and not is_new: self.up_to_date = True self.up_to_date_event.set() else: