URI: 
       tseparate synchronize and update_tx_history - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit fd5f581128ef82d24014ab6f7dae6ccf26520c07
   DIR parent a7aa613b58d507ae1116573d72eb8d33ccc4af3b
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Mon, 19 Dec 2011 13:18:19 +0100
       
       separate synchronize and update_tx_history
       
       Diffstat:
         M client/electrum.py                  |      27 ++++++++++++++++++---------
         M client/gui.py                       |      14 ++++++++++----
       
       2 files changed, 28 insertions(+), 13 deletions(-)
       ---
   DIR diff --git a/client/electrum.py b/client/electrum.py
       t@@ -355,13 +355,16 @@ class Wallet:
        
        
            def synchronize(self):
       +        is_new = False
                while True:
                    if self.change_addresses == []:
                        self.create_new_address2(True)
       +                is_new = True
                        continue
                    a = self.change_addresses[-1]
                    if self.history.get(a):
                        self.create_new_address2(True)
       +                is_new = True
                    else:
                        break
        
       t@@ -369,17 +372,19 @@ class Wallet:
                while True:
                    if len(self.addresses) < n:
                        self.create_new_address2(False)
       +                is_new = True
                        continue
                    if map( lambda a: self.history.get(a), self.addresses[-n:] ) == n*[[]]:
                        break
                    else:
                        self.create_new_address2(False)
       +                is_new = True
        
       -        is_found = (len(self.change_addresses) > 1 ) or ( len(self.addresses) > self.gap_limit )
       -        if not is_found: return False
        
       -        # history and addressbook
       -        self.update_tx_history()
       +    def is_found(self):
       +        return (len(self.change_addresses) > 1 ) or ( len(self.addresses) > self.gap_limit )
       +
       +    def fill_addressbook(self):
                for tx in self.tx_history.values():
                    if tx['value']<0:
                        for i in tx['outputs']:
       t@@ -387,7 +392,7 @@ class Wallet:
                                self.addressbook.append(i)
                # redo labels
                self.update_tx_labels()
       -        return True
       +
        
            def save(self):
                s = {
       t@@ -528,6 +533,7 @@ class Wallet:
                self.servers = map( lambda x:x[1], ast.literal_eval( self.request( repr ( ('peers', '' )))) )
        
            def update(self):
       +        is_new = False
                blocks, changed_addresses = self.poll()
                if blocks == -1: raise BaseException("session not found")
                self.blocks = int(blocks)
       t@@ -536,9 +542,11 @@ class Wallet:
                        print "updating history for", addr
                        self.history[addr] = self.retrieve_history(addr)
                        self.status[addr] = blk_hash
       +                is_new = True
        
       -        if changed_addresses:
       +        if is_new:
                    self.synchronize()
       +            self.update_tx_history()
                    self.save()
                    return True
                else:
       t@@ -756,10 +764,11 @@ if __name__ == '__main__':
                    gap = raw_input("gap limit (default 5):")
                    if gap: wallet.gap_limit = int(gap)
                    print "recovering wallet..."
       -            r = wallet.synchronize()
       -            if r:
       -                print "recovery successful"
       +            wallet.synchronize()
       +            if wallet.is_found():
       +                wallet.fill_addressbook()
                        wallet.save()
       +                print "recovery successful"
                    else:
                        print "no wallet found"
                else:
   DIR diff --git a/client/gui.py b/client/gui.py
       t@@ -134,9 +134,15 @@ def init_wallet(wallet):
        
                    def recover_thread( wallet, dialog ):
                        wallet.init_mpk( wallet.seed ) # not encrypted at this point
       -                wallet.is_found = wallet.synchronize()
       -                if wallet.is_found:
       +                wallet.synchronize()
       +
       +                if wallet.is_found():
       +                    # history and addressbook
       +                    wallet.update_tx_history()
       +                    wallet.fill_addressbook()
       +                    print "recovery successful"
                            wallet.save()
       +
                        gobject.idle_add( dialog.destroy )
        
                    thread.start_new_thread( recover_thread, ( wallet, dialog ) )
       t@@ -504,8 +510,8 @@ class BitcoinGUI:
                                get_servers_time = time.time()
                                
                                self.period = 15 if self.wallet.use_http() else 5
       -                        u = self.wallet.update()
       -                        if u:
       +                        if self.wallet.update():
       +                            self.wallet.update_session()
                                    gobject.idle_add( self.update_history_tab )
                                    gobject.idle_add( self.update_receiving_tab )
                                    # addressbook too...