Big numbers on keypad
[gc-dialer] / gc_dialer / gc_dialer.py
index 1bb7a4a..c376a2c 100755 (executable)
@@ -9,7 +9,6 @@ bergman@merctech.com
 """
 
 
-from __future__ import with_statement
 import sys
 import os
 import re
@@ -21,8 +20,13 @@ import gtk
 import gc
 #import hildon
 
+import doctest
+import optparse
+
 from gcbackend import GCDialer
 
+import socket
+socket.setdefaulttimeout(5)
 
 @contextlib.contextmanager
 def gtk_critical_section():
@@ -50,11 +54,12 @@ def makepretty(phonenumber):
         pretty numbers:
                if phonenumber begins with 0:
                        ...-(...)-...-....
-               else
-                       if phonenumber is 13 digits:
-                               (...)-...-....
-                       else if phonenumber is 10 digits:
-                               ...-....
+               if phonenumber begins with 1: ( for gizmo callback numbers )
+                       1 (...)-...-....
+               if phonenumber is 13 digits:
+                       (...)-...-....
+               if phonenumber is 10 digits:
+                       ...-....
        >>> makepretty("12")
        '12'
        >>> makepretty("1234567")
@@ -72,17 +77,19 @@ def makepretty(phonenumber):
 
        if phonenumber[0] == "0":
                prettynumber = ""
-               prettynumber += "+" + phonenumber[0:3]
+               prettynumber += "+%s" % phonenumber[0:3]
                if 3 < len(phonenumber):
-                       prettynumber += "-(" + phonenumber[3:6] + ")"
+                       prettynumber += "-(%s)" % phonenumber[3:6]
                        if 6 < len(phonenumber):
-                               prettynumber += "-" + phonenumber[6:9]
+                               prettynumber += "-%s" % phonenumber[6:9]
                                if 9 < len(phonenumber):
-                                       prettynumber += "-" + phonenumber[9:]
+                                       prettynumber += "-%s" % phonenumber[9:]
                return prettynumber
        elif len(phonenumber) <= 7:
                prettynumber = "%s-%s" % (phonenumber[0:3], phonenumber[3:])
-       elif 7 < len(phonenumber):
+       elif len(phonenumber) > 8 and phonenumber[0] == 1:
+               prettynumber = "1 (%s)-%s-%s" %(phonenumber[1:4], phonenumber[4:7], phonenumber[7:]) 
+       elif len(phonenumber) > 7:
                prettynumber = "(%s)-%s-%s" % (phonenumber[0:3], phonenumber[3:6], phonenumber[6:])
        return prettynumber
 
@@ -102,6 +109,9 @@ class Dialpad(object):
                        if os.path.isfile(path):
                                self.wTree.add_from_file(path)
                                break
+               else:
+                       self.ErrPopUp("Cannot find gc_dialer.xml")
+                       sys.exit(1)#@todo Is this the best way to force a quit on error?
 
                self.window = self.wTree.get_object("Dialpad")
                #Get the buffer associated with the number display
@@ -133,11 +143,11 @@ class Dialpad(object):
                except:
                        print "No hildon"
 
-               if (self.window):
+               if self.window:
                        self.window.connect("destroy", gtk.main_quit)
                        self.window.show_all()
 
-               dic = {
+               callbackMapping = {
                        # Process signals from buttons
                        "on_digit_clicked"  : self.on_digit_clicked,
                        "on_dial_clicked"    : self.on_dial_clicked,
@@ -148,7 +158,7 @@ class Dialpad(object):
                        "on_recentview_row_activated" : self.on_recentview_row_activated,
                        "on_back_clicked" : self.Backspace
                }
-               self.wTree.connect_signals(dic)
+               self.wTree.connect_signals(callbackMapping)
 
                self.attemptLogin(3)
                if self.gcd.getCallbackNumber() is None:
@@ -192,8 +202,8 @@ class Dialpad(object):
                self.callbacklist = gtk.ListStore(gobject.TYPE_STRING)
                combobox.set_model(self.callbacklist)
                combobox.set_text_column(0)
-               for k, v in self.gcd.getCallbackNumbers().iteritems():
-                       self.callbacklist.append([makepretty(k)] )
+               for number, description in self.gcd.getCallbackNumbers().iteritems():
+                       self.callbacklist.append([makepretty(number)] )
 
                self.wTree.get_object("callbackentry").set_text(makepretty(self.gcd.getCallbackNumber()))
 
@@ -211,20 +221,22 @@ class Dialpad(object):
                else:
                        dialog = self.wTree.get_object("login_dialog")
 
-               while ( (times > 0) and (self.gcd.isAuthed() is False) ):
-                       if dialog.run() == gtk.RESPONSE_OK:
-                               if self.isHildon:
-                                       username = dialog.get_username()
-                                       password = dialog.get_password()
-                               else:
-                                       username = self.wTree.get_object("usernameentry").get_text()
-                                       password = self.wTree.get_object("passwordentry").get_text()
-                                       self.wTree.get_object("passwordentry").set_text("")
-                               self.gcd.login(username, password)
-                               dialog.hide()
-                               times = times - 1
-                       else:
+               while (0 < times) and not self.gcd.isAuthed():
+                       if dialog.run() != gtk.RESPONSE_OK:
                                times = 0
+                               continue
+
+                       if self.isHildon:
+                               username = dialog.get_username()
+                               password = dialog.get_password()
+                       else:
+                               username = self.wTree.get_object("usernameentry").get_text()
+                               password = self.wTree.get_object("passwordentry").get_text()
+                               self.wTree.get_object("passwordentry").set_text("")
+                       print "Attempting login"
+                       self.gcd.login(username, password)
+                       dialog.hide()
+                       times -= 1
 
                if self.isHildon:
                        dialog.destroy()
@@ -275,11 +287,10 @@ class Dialpad(object):
                self.setNumber(self.phonenumber[:-1])
 
        def on_digit_clicked(self, widget):
-               self.setNumber(self.phonenumber + re.sub('\D', '', widget.get_label()))
+               self.setNumber(self.phonenumber + widget.get_name()[5])
 
 
 def run_doctest():
-       import doctest
        failureCount, testCount = doctest.testmod()
        if not failureCount:
                print "Tests Successful"
@@ -298,9 +309,7 @@ def run_dialpad():
 
 
 if __name__ == "__main__":
-       from optparse import OptionParser
-
-       parser = OptionParser()
+       parser = optparse.OptionParser()
        parser.add_option("-t", "--test", action="store_true", dest="test", help="Run tests")
        (options, args) = parser.parse_args()