URI: 
       tstorage: convert_wallet_type - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 090a28461953144fe3db53a39a9adbdba66ee122
   DIR parent 6e6ba37e7e9ad83a95f2cd347cb84f2aff159c6a
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Fri, 19 Aug 2016 09:57:29 +0200
       
       storage: convert_wallet_type
       
       Diffstat:
         M lib/storage.py                      |      49 +++++++++++++++++++++++--------
       
       1 file changed, 37 insertions(+), 12 deletions(-)
       ---
   DIR diff --git a/lib/storage.py b/lib/storage.py
       t@@ -195,12 +195,38 @@ class WalletStorage(PrintError):
                    raise BaseException("This wallet has multiple accounts and must be split")
                return result
        
       -    def requires_upgrade(storage):
       -        # '/x' is the internal ID for imported accounts
       -        return bool(storage.get('accounts', {}).get('/x', {}).get('imported',{}))
       +    def requires_upgrade(self):
       +        r = False
       +        r |= self.convert_wallet_type(True)
       +        r |= self.convert_imported(True)
       +        return r
       +
       +    def upgrade(self):
       +        self.convert_imported(False)
       +        self.convert_wallet_type(False)
       +        self.write()
        
       -    def upgrade(storage):
       -        d = storage.get('accounts', {}).get('/x', {}).get('imported',{})
       +    def convert_wallet_type(self, is_test):
       +        assert not self.requires_split()
       +        wallet_type = self.get('wallet_type')
       +        if wallet_type not in ['trezor', 'keepkey']:
       +            return False
       +        if is_test:
       +            return True
       +        self.put('wallet_type', 'standard')
       +        self.put('key_type', 'hardware')
       +        self.put('hardware_type', wallet_type)
       +        xpub = self.get('master_public_keys')["x/0'"]
       +        self.put('master_public_keys', {'x/': xpub})
       +        self.put('account_id', 0)
       +
       +    def convert_imported(self, test):
       +        # '/x' is the internal ID for imported accounts
       +        d = self.get('accounts', {}).get('/x', {}).get('imported',{})
       +        if not d:
       +            return False
       +        if test:
       +            return True
                addresses = []
                keypairs = {}
                for addr, v in d.items():
       t@@ -212,16 +238,15 @@ class WalletStorage(PrintError):
                if addresses and keypairs:
                    raise BaseException('mixed addresses and privkeys')
                elif addresses:
       -            storage.put('addresses', addresses)
       -            storage.put('accounts', None)
       +            self.put('addresses', addresses)
       +            self.put('accounts', None)
                elif keypairs:
       -            storage.put('wallet_type', 'standard')
       -            storage.put('key_type', 'imported')
       -            storage.put('keypairs', keypairs)
       -            storage.put('accounts', None)
       +            self.put('wallet_type', 'standard')
       +            self.put('key_type', 'imported')
       +            self.put('keypairs', keypairs)
       +            self.put('accounts', None)
                else:
                    raise BaseException('no addresses or privkeys')
       -        storage.write()
        
            def get_action(self):
                action = run_hook('get_action', self)