fix status bar display
This commit is contained in:
parent
d6d9b5f1d1
commit
a0a67221bb
|
@ -25,18 +25,14 @@ DEFAULT_SERVERS = ['electrum.bitcoins.sk','ecdsa.org','electrum.novit.ro'] # li
|
||||||
|
|
||||||
|
|
||||||
class Interface:
|
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.host = host
|
||||||
self.port = port
|
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.servers = [] # actual list from IRC
|
||||||
self.rtime = 0
|
self.rtime = 0
|
||||||
|
|
||||||
self.is_connected = False
|
self.is_connected = True
|
||||||
|
|
||||||
#only asynchrnous
|
#only asynchrnous
|
||||||
self.addresses_waiting_for_status = []
|
self.addresses_waiting_for_status = []
|
||||||
|
@ -50,7 +46,7 @@ class Interface:
|
||||||
|
|
||||||
|
|
||||||
def is_up_to_date(self):
|
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):
|
def send_tx(self, data):
|
||||||
|
@ -75,18 +71,20 @@ class Interface:
|
||||||
if error:
|
if error:
|
||||||
print "received error:", c, method, params
|
print "received error:", c, method, params
|
||||||
else:
|
else:
|
||||||
#self.handle_response(method, params, result)
|
self.update_waiting_lists(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)
|
|
||||||
self.responses.put({'method':method, 'params':params, 'result':result})
|
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):
|
def subscribe(self, addresses):
|
||||||
messages = []
|
messages = []
|
||||||
|
@ -215,6 +213,7 @@ class NativeInterface(PollingInterface):
|
||||||
if cmd == 'new_session':
|
if cmd == 'new_session':
|
||||||
self.session_id, self.message = ast.literal_eval( out )
|
self.session_id, self.message = ast.literal_eval( out )
|
||||||
else:
|
else:
|
||||||
|
self.update_waiting_lists(method, params)
|
||||||
self.responses.put({'method':method, 'params':params, 'result':out})
|
self.responses.put({'method':method, 'params':params, 'result':out})
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -950,12 +950,12 @@ class Wallet:
|
||||||
if blocks == -1: raise BaseException("session not found")
|
if blocks == -1: raise BaseException("session not found")
|
||||||
self.blocks = int(blocks)
|
self.blocks = int(blocks)
|
||||||
if changed_addresses:
|
if changed_addresses:
|
||||||
self.is_up_to_date = False
|
#self.is_up_to_date = False
|
||||||
self.was_updated = True
|
self.was_updated = True
|
||||||
for addr, status in changed_addresses.items():
|
for addr, status in changed_addresses.items():
|
||||||
self.receive_status_callback(addr, status)
|
self.receive_status_callback(addr, status)
|
||||||
else:
|
#else:
|
||||||
self.is_up_to_date = True
|
# self.is_up_to_date = True
|
||||||
|
|
||||||
elif method == 'server.peers':
|
elif method == 'server.peers':
|
||||||
#print "Received server list: ", result
|
#print "Received server list: ", result
|
||||||
|
@ -984,13 +984,16 @@ class Wallet:
|
||||||
else:
|
else:
|
||||||
print "unknown message:", method, params, result
|
print "unknown message:", method, params, result
|
||||||
|
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
self.up_to_date_event.wait()
|
self.up_to_date_event.wait()
|
||||||
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
while self.interface.is_connected:
|
while self.interface.is_connected:
|
||||||
new = self.synchronize()
|
# the interface should use an input queue for requests so that we don't care about synchronous
|
||||||
if self.interface.is_up_to_date() and not new:
|
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 = True
|
||||||
self.up_to_date_event.set()
|
self.up_to_date_event.set()
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue