New port numbers
[electrum-nvc.git] / gui / text.py
index daede81..4cf9a9f 100644 (file)
@@ -1,11 +1,11 @@
-import curses, datetime
+import curses, datetime, locale
 from decimal import Decimal
 _ = lambda x:x
 #from i18n import _
-from electrum.util import format_satoshis, set_verbosity
-from electrum.bitcoin import is_valid
+from electrum_nvc.util import format_satoshis, set_verbosity
+from electrum_nvc.bitcoin import is_valid
 
-from electrum import Wallet, WalletStorage
+from electrum_nvc import Wallet, WalletStorage
 
 import tty, sys
 
@@ -18,11 +18,14 @@ class ElectrumGui:
         self.network = network
         storage = WalletStorage(config)
         if not storage.file_exists:
-            print "Wallet not found. try 'electrum create'"
+            print "Wallet not found. try 'electrum-nvc create'"
             exit()
 
         self.wallet = Wallet(storage)
-        self.wallet.start_threads(network)
+        self.wallet.start_threads(self.network)
+
+        locale.setlocale(locale.LC_ALL, '')
+        self.encoding = locale.getpreferredencoding()
 
         self.stdscr = curses.initscr()
         curses.noecho()
@@ -46,19 +49,22 @@ class ElectrumGui:
         self.str_description = ""
         self.str_amount = ""
         self.str_fee = ""
-        
-        self.network.register_callback('updated', self.refresh)
-        self.network.register_callback('connected', self.refresh)
-        self.network.register_callback('disconnected', self.refresh)
-        self.network.register_callback('disconnecting', self.refresh)
+        self.history = None
+       
+        if self.network: 
+            self.network.register_callback('updated', self.update)
+            self.network.register_callback('connected', self.refresh)
+            self.network.register_callback('disconnected', self.refresh)
+            self.network.register_callback('disconnecting', self.refresh)
+
         self.tab_names = [_("History"), _("Send"), _("Receive"), _("Contacts"), _("Wall")]
         self.num_tabs = len(self.tab_names)
-        
+
 
     def set_cursor(self, x):
         try:
             curses.curs_set(x)
-        except:
+        except Exception:
             pass
 
     def restore_or_create(self):
@@ -76,41 +82,57 @@ class ElectrumGui:
         self.set_cursor(0)
         return s
 
+    def update(self):
+        self.update_history()
+        if self.tab == 0: 
+            self.print_history()
+        self.refresh()
 
     def print_history(self):
+
+        width = [20, 40, 14, 14]
+        delta = (self.maxx - sum(width) - 4)/3
+        format_str = "%"+"%d"%width[0]+"s"+"%"+"%d"%(width[1]+delta)+"s"+"%"+"%d"%(width[2]+delta)+"s"+"%"+"%d"%(width[3]+delta)+"s"
+
+        if self.history is None:
+            self.update_history()
+
+        self.print_list(self.history[::-1], format_str%( _("Date"), _("Description"), _("Amount"), _("Balance")))
+
+    def update_history(self):
         width = [20, 40, 14, 14]
         delta = (self.maxx - sum(width) - 4)/3
         format_str = "%"+"%d"%width[0]+"s"+"%"+"%d"%(width[1]+delta)+"s"+"%"+"%d"%(width[2]+delta)+"s"+"%"+"%d"%(width[3]+delta)+"s"
 
         b = 0 
-        messages = []
+        self.history = []
 
         for item in self.wallet.get_tx_history():
             tx_hash, conf, is_mine, value, fee, balance, timestamp = item
             if conf:
                 try:
                     time_str = datetime.datetime.fromtimestamp( timestamp).isoformat(' ')[:-3]
-                except:
+                except Exception:
                     time_str = "------"
             else:
                 time_str = 'pending'
 
             label, is_default_label = self.wallet.get_label(tx_hash)
-            messages.append( format_str%( time_str, label, format_satoshis(value, whitespaces=True), format_satoshis(balance, whitespaces=True) ) )
-
-        self.print_list(messages[::-1], format_str%( _("Date"), _("Description"), _("Amount"), _("Balance")))
+            self.history.append( format_str%( time_str, label, format_satoshis(value, whitespaces=True), format_satoshis(balance, whitespaces=True) ) )
 
 
     def print_balance(self):
-        if self.network.interface and self.network.interface.is_connected:
+        if not self.network:
+            msg = _("Offline")
+        elif self.network.interface and self.network.interface.is_connected:
             if not self.wallet.up_to_date:
-                msg = _( "Synchronizing..." )
+                msg = _("Synchronizing...")
             else: 
                 c, u =  self.wallet.get_balance()
-                msg = _("Balance")+": %f  "%(Decimal( c ) / 100000000)
-                if u: msg += "  [%f unconfirmed]"%(Decimal( u ) / 100000000)
+                msg = _("Balance")+": %f  "%(Decimal( c ) / 1000000)
+                if u: msg += "  [%f unconfirmed]"%(Decimal( u ) / 1000000)
         else:
-                msg = _( "Not connected" )
+            msg = _("Not connected")
             
         self.stdscr.addstr( self.maxy -1, 3, msg)
 
@@ -125,8 +147,9 @@ class ElectrumGui:
         self.print_list(messages, "%19s  %25s "%("Address", "Label"))
 
     def print_receive(self):
-        messages = map(lambda addr: "%30s    %30s       "%(addr, self.wallet.labels.get(addr,"")), self.wallet.addresses())
-        self.print_list(messages, "%19s  %25s "%("Address", "Label"))
+        fmt = "%-35s  %-30s"
+        messages = map(lambda addr: fmt % (addr, self.wallet.labels.get(addr,"")), self.wallet.addresses())
+        self.print_list(messages,   fmt % ("Address", "Label"))
 
     def print_edit_line(self, y, label, text, index, size):
         text += " "*(size - len(text) )
@@ -143,8 +166,8 @@ class ElectrumGui:
         self.stdscr.addstr( 12, 25, _("[Clear]"), curses.A_REVERSE if self.pos%6==5 else curses.color_pair(2))
 
     def print_banner(self):
-        self.print_list( self.network.banner.split('\n'))
-
+        if self.network:
+            self.print_list( self.network.banner.split('\n'))
 
     def print_list(self, list, firstline = None):
         self.maxpos = len(list)
@@ -155,7 +178,9 @@ class ElectrumGui:
         for i in range(self.maxy-4):
             msg = list[i] if i < len(list) else ""
             msg += " "*(self.maxx - 2 - len(msg))
-            self.stdscr.addstr( i+2, 1, msg[0:self.maxx - 2], curses.A_REVERSE if i == (self.pos % self.maxpos) else 0)
+            m = msg[0:self.maxx - 2]
+            m = m.encode(self.encoding)
+            self.stdscr.addstr( i+2, 1, m, curses.A_REVERSE if i == (self.pos % self.maxpos) else 0)
 
     def refresh(self):
         if self.tab == -1: return
@@ -262,16 +287,16 @@ class ElectrumGui:
 
     def do_send(self):
         if not is_valid(self.str_recipient):
-            self.show_message(_('Invalid Bitcoin address'))
+            self.show_message(_('Invalid Novacoin address'))
             return
         try:
-            amount = int( Decimal( self.str_amount) * 100000000 )
-        except:
+            amount = int( Decimal( self.str_amount) * 1000000 )
+        except Exception:
             self.show_message(_('Invalid Amount'))
             return
         try:
-            fee = int( Decimal( self.str_fee) * 100000000 )
-        except:
+            fee = int( Decimal( self.str_fee) * 1000000 )
+        except Exception:
             self.show_message(_('Invalid Fee'))
             return
 
@@ -284,7 +309,7 @@ class ElectrumGui:
 
         try:
             tx = self.wallet.mktx( [(self.str_recipient, amount)], password, fee)
-        except BaseException, e:
+        except Exception as e:
             self.show_message(str(e))
             return
             
@@ -294,7 +319,7 @@ class ElectrumGui:
         h = self.wallet.send_tx(tx)
         self.show_message(_("Please wait..."), getchar=False)
         self.wallet.tx_event.wait()
-        status, msg = self.wallet.receive_tx( h )
+        status, msg = self.wallet.receive_tx( h, tx )
 
         if status:
             self.show_message(_('Payment sent.'))
@@ -319,6 +344,7 @@ class ElectrumGui:
 
 
     def network_dialog(self):
+        if not self.network: return
         auto_connect = self.network.config.get('auto_cycle')
         host, port, protocol = self.network.default_server.split(':')
         srv = 'auto-connect' if auto_connect else self.network.default_server
@@ -334,7 +360,7 @@ class ElectrumGui:
                 if not auto_connect:
                     try:
                         host, port, protocol = server.split(':')
-                    except:
+                    except Exception:
                         self.show_message("Error:" + server + "\nIn doubt, type \"auto-connect\"")
                         return False
 
@@ -442,7 +468,7 @@ class ElectrumGui:
                     choices = item.get('choices')
                     try:
                         j = choices.index(item.get('value'))
-                    except:
+                    except Exception:
                         j = 0
                     new_choice = choices[(j + 1)% len(choices)]
                     item['value'] = new_choice