URI: 
       tMerge pull request #1187 from kyuupichan/local_height - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit ffda5cd8663cb0e4381ecb4835e343831ffe67e9
   DIR parent 8656785aa75519a7cd9307da3945152b2efe1f20
  HTML Author: ThomasV <electrumdev@gmail.com>
       Date:   Wed,  6 May 2015 17:45:42 +0200
       
       Merge pull request #1187 from kyuupichan/local_height
       
       Move away from requiring network and blockchain objects to be able to re...
       Diffstat:
         M lib/blockchain.py                   |      31 ++++++++-----------------------
         M lib/network.py                      |       2 +-
         M lib/network_proxy.py                |       2 +-
         M lib/simple_config.py                |      12 ++++++++++++
       
       4 files changed, 22 insertions(+), 25 deletions(-)
       ---
   DIR diff --git a/lib/blockchain.py b/lib/blockchain.py
       t@@ -30,18 +30,12 @@ class Blockchain(util.DaemonThread):
                self.config = config
                self.network = network
                self.lock = threading.Lock()
       -        self.local_height = 0
                self.headers_url = 'http://headers.electrum.org/blockchain_headers'
       -        self.set_local_height()
                self.queue = Queue.Queue()
        
       -    def height(self):
       -        return self.local_height
       -
            def run(self):
                self.init_headers_file()
       -        self.set_local_height()
       -        self.print_error("%d blocks"%self.local_height)
       +        self.print_error("%d blocks" % self.config.height)
        
                while self.is_running():
                    try:
       t@@ -54,12 +48,12 @@ class Blockchain(util.DaemonThread):
                    if not header:
                        continue
                    height = header.get('block_height')
       -            if height <= self.local_height:
       +            if height <= self.config.height:
                        continue
       -            if height > self.local_height + 50:
       +            if height > self.config.height + 50:
                        if not self.get_and_verify_chunks(i, header, height):
                            continue
       -            if height > self.local_height:
       +            if height > self.config.height:
                        # get missing parts from interface (until it connects to my chain)
                        chain = self.get_chain( i, header )
                        # skip that server if the result is not consistent
       t@@ -161,7 +155,7 @@ class Blockchain(util.DaemonThread):
                return rev_hex(Hash(self.header_to_string(header).decode('hex')).encode('hex'))
        
            def path(self):
       -        return os.path.join( self.config.path, 'blockchain_headers')
       +        return self.config.headers_filename()
        
            def init_headers_file(self):
                filename = self.path()
       t@@ -184,7 +178,7 @@ class Blockchain(util.DaemonThread):
                f.seek(index*2016*80)
                h = f.write(chunk)
                f.close()
       -        self.set_local_height()
       +        self.config.refresh_height()
        
            def save_header(self, header):
                data = self.header_to_string(header).decode('hex')
       t@@ -195,16 +189,7 @@ class Blockchain(util.DaemonThread):
                f.seek(height*80)
                h = f.write(data)
                f.close()
       -        self.set_local_height()
       -
       -
       -    def set_local_height(self):
       -        name = self.path()
       -        if os.path.exists(name):
       -            h = os.path.getsize(name)/80 - 1
       -            if self.local_height != h:
       -                self.local_height = h
       -
       +        self.config.refresh_height()
        
            def read_header(self, block_height):
                name = self.path()
       t@@ -322,7 +307,7 @@ class Blockchain(util.DaemonThread):
            def get_and_verify_chunks(self, i, header, height):
        
                queue = Queue.Queue()
       -        min_index = (self.local_height + 1)/2016
       +        min_index = (self.config.height + 1)/2016
                max_index = (height + 1)/2016
                n = min_index
                while n < max_index + 1:
   DIR diff --git a/lib/network.py b/lib/network.py
       t@@ -562,4 +562,4 @@ class Network(util.DaemonThread):
                return self.blockchain.read_header(tx_height)
        
            def get_local_height(self):
       -        return self.blockchain.height()
       +        return self.config.height
   DIR diff --git a/lib/network_proxy.py b/lib/network_proxy.py
       t@@ -189,7 +189,7 @@ class NetworkProxy(util.DaemonThread):
                return self.synchronous_get([('network.get_header', [height])])[0]
        
            def get_local_height(self):
       -        return self.blockchain_height
       +        return self.config.height
        
            def get_server_height(self):
                return self.server_height
   DIR diff --git a/lib/simple_config.py b/lib/simple_config.py
       t@@ -78,6 +78,8 @@ class SimpleConfig(object):
                # user config.
                self.user_config = read_user_config_function(self.path)
        
       +        self.refresh_height()
       +
                set_config(self)  # Make a singleton instance of 'self'
        
            def init_path(self):
       t@@ -122,6 +124,16 @@ class SimpleConfig(object):
                    return False
                return True
        
       +    def headers_filename(self):
       +        return os.path.join(self.path, 'blockchain_headers')
       +
       +    def refresh_height(self):
       +        name = self.headers_filename()
       +        if os.path.exists(name):
       +            self.height = os.path.getsize(name) / 80 - 1
       +        else:
       +            self.height = 0
       +
            def save_user_config(self):
                if not self.path:
                    return