URI: 
       tfix password dialog, for imported wallets - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit ace127ee430711b4fa1f7f42e7606bf074510733
   DIR parent 95fce65e12420ca85a9d9e53279df513b7584590
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Thu,  1 May 2014 12:42:06 +0200
       
       fix password dialog, for imported wallets
       
       Diffstat:
         M gui/qt/main_window.py               |       2 +-
         M gui/qt/password_dialog.py           |       6 +++---
         M lib/wallet.py                       |      27 +++++++++++++++------------
       
       3 files changed, 19 insertions(+), 16 deletions(-)
       ---
   DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py
       t@@ -1072,7 +1072,7 @@ class ElectrumWindow(QMainWindow):
                    menu.addAction(_("QR code"), lambda: self.show_qrcode("bitcoin:" + addr, _("Address")) )
                    menu.addAction(_("Edit label"), lambda: self.edit_label(True))
                    menu.addAction(_("Public keys"), lambda: self.show_public_keys(addr))
       -            if self.wallet.seed:
       +            if not self.wallet.is_watching_only():
                        menu.addAction(_("Private key"), lambda: self.show_private_key(addr))
                        menu.addAction(_("Sign/verify message"), lambda: self.sign_verify_message(addr))
                        #menu.addAction(_("Encrypt/decrypt message"), lambda: self.encrypt_message(addr))
   DIR diff --git a/gui/qt/password_dialog.py b/gui/qt/password_dialog.py
       t@@ -73,8 +73,8 @@ def make_password_dialog(self, wallet, msg):
        
        def run_password_dialog(self, wallet, parent):
                
       -    if wallet and not wallet.seed:
       -        QMessageBox.information(parent, _('Error'), _('No seed'), _('OK'))
       +    if wallet.is_watching_only():
       +        QMessageBox.information(parent, _('Error'), _('This is a watching-only wallet'), _('OK'))
                return False, None, None
        
            if not self.exec_():
       t@@ -116,7 +116,7 @@ class PasswordDialog(QDialog):
                    return
        
                try:
       -            self.wallet.get_seed(password)
       +            self.wallet.check_password(password)
                except Exception:
                    QMessageBox.warning(self.parent, _('Error'), _('Incorrect Password'), _('OK'))
                    return False, None, None
   DIR diff --git a/lib/wallet.py b/lib/wallet.py
       t@@ -374,13 +374,12 @@ class Abstract_Wallet:
                if self.is_watching_only():
                    return []
        
       -        # first check the provided password
       -        seed = self.get_seed(password)
       -
                out = []
                if address in self.imported_keys.keys():
       +            self.check_password(password)
                    out.append( pw_decode( self.imported_keys[address], password ) )
                else:
       +            seed = self.get_seed(password)
                    account_id, sequence = self.get_address_index(address)
                    account = self.accounts[account_id]
                    xpubs = account.get_master_pubkeys()
       t@@ -948,12 +947,14 @@ class Abstract_Wallet:
        
        
            def update_password(self, old_password, new_password):
       -        if new_password == '': new_password = None
       -        decoded = self.get_seed(old_password)
       -        self.seed = pw_encode( decoded, new_password)
       -        self.storage.put('seed', self.seed, True)
       -        self.use_encryption = (new_password != None)
       -        self.storage.put('use_encryption', self.use_encryption,True)
       +        if new_password == '': 
       +            new_password = None
       +
       +        if self.has_seed():
       +            decoded = self.get_seed(old_password)
       +            self.seed = pw_encode( decoded, new_password)
       +            self.storage.put('seed', self.seed, True)
       +
                for k in self.imported_keys.keys():
                    a = self.imported_keys[k]
                    b = pw_decode(a, old_password)
       t@@ -967,6 +968,9 @@ class Abstract_Wallet:
                    self.master_private_keys[k] = c
                self.storage.put('master_private_keys', self.master_private_keys, True)
        
       +        self.use_encryption = (new_password != None)
       +        self.storage.put('use_encryption', self.use_encryption,True)
       +
        
            def freeze(self,addr):
                if self.is_mine(addr) and addr not in self.frozen_addresses:
       t@@ -1651,13 +1655,12 @@ class OldWallet(Deterministic_Wallet):
                if self.is_watching_only():
                    return []
        
       -        # first check the provided password
       -        seed = self.get_seed(password)
       -        
                out = []
                if address in self.imported_keys.keys():
       +            self.check_password()
                    out.append( pw_decode( self.imported_keys[address], password ) )
                else:
       +            seed = self.get_seed(password)
                    account_id, sequence = self.get_address_index(address)
                    pk = self.accounts[0].get_private_key(seed, sequence)
                    out.append(pk)