allow multiple callbacks for a given name
authorthomasv <thomasv@gitorious>
Mon, 22 Oct 2012 11:43:58 +0000 (13:43 +0200)
committerthomasv <thomasv@gitorious>
Mon, 22 Oct 2012 11:43:58 +0000 (13:43 +0200)
electrum
lib/gui_lite.py
lib/interface.py
lib/wallet.py

index 66f4e42..ccdb0cb 100755 (executable)
--- a/electrum
+++ b/electrum
@@ -185,15 +185,13 @@ if __name__ == '__main__':
             sys.exit("Error: Unknown GUI: " + pref_gui )
 
         interface = Interface(config, True)
-        interface.start()
         wallet.interface = interface
-
         gui = gui.ElectrumGui(wallet, config)
         interface.register_callback('peers', gui.server_list_changed)
-        # need to wait until interface is connected..
+
+        interface.start()
         WalletSynchronizer(wallet, config).start()
         WalletVerifier(wallet, config).start()
-        
 
         try:
             found = config.wallet_file_exists
index 2f47078..2971978 100644 (file)
@@ -801,6 +801,8 @@ class MiniDriver(QObject):
         self.window = window
 
         self.wallet.interface.register_callback('updated',self.update_callback)
+        self.wallet.interface.register_callback('connected', self.update_callback)
+        self.wallet.interface.register_callback('disconnected', self.update_callback)
 
         self.state = None
 
index fb7db08..9e03142 100644 (file)
@@ -49,15 +49,15 @@ class Interface(threading.Thread):
 
     def register_callback(self, event, callback):
         with self.lock:
-            self.callbacks[event] = callback
+            if not self.callbacks.get(event):
+                self.callbacks[event] = []
+            self.callbacks[event].append(callback)
 
     def trigger_callback(self, event):
         with self.lock:
-            callback = self.callbacks.get(event)
-        if callback:
-            callback()
-            
-
+            callbacks = self.callbacks.get(event,[])[:]
+        if callbacks:
+            [callback() for callback in callbacks]
 
     def init_server(self, host, port, proxy=None, use_ssl=True):
         self.host = host
index b9cd8e1..4d1b14a 100644 (file)
@@ -844,9 +844,6 @@ class WalletSynchronizer(threading.Thread):
                 self.wallet.up_to_date = False
                 self.wallet.was_updated = True
 
-        if self.wallet.was_updated:
-            self.interface.trigger_callback('updated')
-            self.wallet.was_updated = False
 
 
     def subscribe_to_addresses(self, addresses):
@@ -868,6 +865,10 @@ class WalletSynchronizer(threading.Thread):
             # 1. send new requests
             self.synchronize_wallet()
 
+            if self.wallet.was_updated:
+                self.interface.trigger_callback('updated')
+                self.wallet.was_updated = False
+
             # 2. get a response
             r = self.interface.get_response('synchronizer')
             if not r: continue
@@ -918,11 +919,15 @@ class WalletSynchronizer(threading.Thread):
 
             elif method == 'server.banner':
                 self.wallet.banner = result
-                self.interface.trigger_callback('updated')
+                self.wallet.was_updated = True
 
             else:
                 print_error("Error: Unknown message:" + method + ", " + repr(params) + ", " + repr(result) )
 
+            if self.wallet.was_updated:
+                self.interface.trigger_callback('updated')
+                self.wallet.was_updated = False
+
 
 encode = lambda x: x[::-1].encode('hex')
 decode = lambda x: x.decode('hex')[::-1]