allow offline creation/recovery within the gui
[electrum-nvc.git] / lib / gui.py
index 7d5ea4f..c4f3d6f 100644 (file)
@@ -97,58 +97,8 @@ def restore_create_dialog(wallet):
     dialog.destroy()
 
     if r==2: return False
-        
-    is_recovery = (r==1)
-
-    # ask for the server.
-    if not run_network_dialog( wallet, parent=None ): return False
-
-    if not is_recovery:
-
-        wallet.new_seed(None)
-        # generate first key
-        wallet.init_mpk( wallet.seed )
-        wallet.up_to_date_event.clear()
-        wallet.update()
+    return 'restore' if r==1 else 'create'
 
-        # run a dialog indicating the seed, ask the user to remember it
-        show_seed_dialog(wallet, None, None)
-            
-        #ask for password
-        change_password_dialog(wallet, None, None)
-    else:
-        # ask for seed and gap.
-        run_recovery_dialog( wallet )
-
-        dialog = gtk.MessageDialog(
-            parent = None,
-            flags = gtk.DIALOG_MODAL, 
-            buttons = gtk.BUTTONS_CANCEL, 
-            message_format = "Please wait..."  )
-        dialog.show()
-
-        def recover_thread( wallet, dialog ):
-            wallet.init_mpk( wallet.seed ) # not encrypted at this point
-            wallet.up_to_date_event.clear()
-            wallet.update()
-
-            if wallet.is_found():
-                # history and addressbook
-                wallet.update_tx_history()
-                wallet.fill_addressbook()
-                print "Recovery successful"
-
-            gobject.idle_add( dialog.destroy )
-
-        thread.start_new_thread( recover_thread, ( wallet, dialog ) )
-        r = dialog.run()
-        dialog.destroy()
-        if r==gtk.RESPONSE_CANCEL: return False
-        if not wallet.is_found:
-            show_message("No transactions found for this seed")
-
-    wallet.save()
-    return True
 
 
 def run_recovery_dialog(wallet):
@@ -197,12 +147,13 @@ def run_recovery_dialog(wallet):
     dialog.destroy()
 
     if r==gtk.RESPONSE_CANCEL:
-        sys.exit(1)
+        return False
+
     try:
         gap = int(gap)
     except:
         show_message("error")
-        sys.exit(1)
+        return False
 
     try:
         seed.decode('hex')
@@ -211,11 +162,12 @@ def run_recovery_dialog(wallet):
         seed = mnemonic.mn_decode( seed.split(' ') )
     if not seed:
         show_message("no seed")
-        sys.exit(1)
+        return False
         
     wallet.seed = seed
     wallet.gap_limit = gap
     wallet.save()
+    return True
 
 
 
@@ -328,7 +280,7 @@ def run_network_dialog( wallet, parent ):
             status = "Not connected"
     else:
         import random
-        status = "Please choose a server."
+        status = "Please choose a server.\nSelect cancel if you are offline."
 
     server = interface.server
     plist, servers_list = interface.get_servers_list()
@@ -575,6 +527,7 @@ class ElectrumWindow:
         self.window.set_border_width(0)
         self.window.connect('mykeypress', gtk.main_quit)
         self.window.set_default_size(720, 350)
+        self.wallet_updated = False
 
         vbox = gtk.VBox()
 
@@ -651,7 +604,6 @@ class ElectrumWindow:
         self.context_id = self.status_bar.get_context_id("statusbar")
         self.update_status_bar()
 
-        self.wallet_updated = False
         self.wallet.interface.register_callback('updated', self.update_callback)
 
 
@@ -1302,3 +1254,57 @@ class ElectrumGui():
 
     def server_list_changed(self):
         pass
+
+    def seed_dialog(self):
+        # ask for seed and gap.
+        return run_recovery_dialog( self.wallet )
+
+    def network_dialog(self):
+        return run_network_dialog( self.wallet, parent=None )
+
+    def create_wallet(self):
+        wallet = self.wallet
+        wallet.new_seed(None)
+        # generate first key
+        wallet.init_mpk( wallet.seed )
+        wallet.synchronize()
+        #wallet.up_to_date_event.clear()
+        #wallet.update()
+        # run a dialog indicating the seed, ask the user to remember it
+        show_seed_dialog(wallet, None, None)
+        #ask for password
+        change_password_dialog(wallet, None, None)
+
+    def restore_wallet(self):
+        wallet = self.wallet
+
+        dialog = gtk.MessageDialog(
+            parent = None,
+            flags = gtk.DIALOG_MODAL, 
+            buttons = gtk.BUTTONS_CANCEL, 
+            message_format = "Please wait..."  )
+        dialog.show()
+        wallet.save()
+
+        def recover_thread( wallet, dialog ):
+            wallet.init_mpk( wallet.seed ) # not encrypted at this point
+            wallet.up_to_date_event.clear()
+            wallet.update()
+
+            if wallet.is_found():
+                # history and addressbook
+                wallet.update_tx_history()
+                wallet.fill_addressbook()
+                print "Recovery successful"
+
+            gobject.idle_add( dialog.destroy )
+
+        thread.start_new_thread( recover_thread, ( wallet, dialog ) )
+        r = dialog.run()
+        dialog.destroy()
+        if r==gtk.RESPONSE_CANCEL: return False
+        if not wallet.is_found:
+            show_message("No transactions found for this seed")
+
+        wallet.save()
+        return True