Added minimal exception handling and some basic cleanup
authorepage <eopage@byu.net>
Sat, 12 Jul 2008 12:56:20 +0000 (12:56 +0000)
committerepage <eopage@byu.net>
Sat, 12 Jul 2008 12:56:20 +0000 (12:56 +0000)
git-svn-id: file:///svnroot/gc-dialer/trunk@85 c39d3808-3fe2-4d86-a59f-b7f623ee9f21

gc_dialer/gc_dialer.py
gc_dialer/gcbackend.py

index 85b79d7..ba93434 100755 (executable)
@@ -147,7 +147,7 @@ class Dialpad(object):
                                self._widgetTree = gtk.glade.XML(path)
                                break
                else:
-                       self.ErrPopUp("Cannot find gc_dialer.glade")
+                       self.display_error_message("Cannot find gc_dialer.glade")
                        gtk.main_quit()
                        return
 
@@ -229,8 +229,8 @@ class Dialpad(object):
                if self._gcBackend.isAuthed():
                        if self._gcBackend.getCallbackNumber() is None:
                                self._gcBackend.setSaneCallback()
+                       self.setAccountNumber()
 
-               self.setAccountNumber()
                print "exit init_gc"
                return False
 
@@ -291,9 +291,7 @@ class Dialpad(object):
                        dialog.hide()
                        times -= 1
 
-               return False
-
-       def ErrPopUp(self, msg):
+       def display_error_message(self, msg):
                error_dialog = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE, msg)
 
                def close(dialog, response, editor):
@@ -386,10 +384,9 @@ class Dialpad(object):
                """
                @todo Potential blocking on web access, maybe we should defer parts of this or put up a dialog?
                """
-               self.attemptLogin(3)
-
-               if not self._gcBackend.isAuthed() or self._gcBackend.getCallbackNumber() == "":
-                       self.ErrPopUp("Backend link with grandcentral is not working, please try again")
+               loggedIn = self.attemptLogin(2)
+               if not loggedIn or not self._gcBackend.isAuthed() or self._gcBackend.getCallbackNumber() == "":
+                       self.display_error_message("Backend link with grandcentral is not working, please try again")
                        return
 
                try:
@@ -399,7 +396,7 @@ class Dialpad(object):
                        callSuccess = False
 
                if not callSuccess:
-                       self.ErrPopUp(self._gcBackend._msg)
+                       self.display_error_message(self._gcBackend._msg)
                else:
                        self.setNumber("")
 
index d0d0e5e..04a0468 100644 (file)
@@ -10,7 +10,9 @@ Copyright 2008 GPLv2
 import os
 import re
 import urllib
+import urllib2
 import time
+import warnings
 
 from browser_emu import MozillaEmulator
 
@@ -63,7 +65,12 @@ class GCDialer(object):
                if time.time() - self._lastAuthed < 60 and not force:
                        return True
 
-               forwardSelectionPage = self._browser.download(GCDialer._forwardselectURL)
+               try:
+                       forwardSelectionPage = self._browser.download(GCDialer._forwardselectURL)
+               except urllib2.URLError, e:
+                       warnings.warn("%s is not accesible" % GCDialer._forwardselectURL, UserWarning, 2)
+                       return False
+
                self._browser.cookies.save()
                if GCDialer._isLoginPageRe.search(forwardSelectionPage) is None:
                        self._grabToken(forwardSelectionPage)
@@ -79,8 +86,15 @@ class GCDialer(object):
                """
                if self.isAuthed():
                        return True
+
                loginPostData = urllib.urlencode( {'username' : username , 'password' : password } )
-               loginSuccessOrFailurePage = self._browser.download(GCDialer._loginURL, loginPostData)
+
+               try:
+                       loginSuccessOrFailurePage = self._browser.download(GCDialer._loginURL, loginPostData)
+               except urllib2.URLError, e:
+                       warnings.warn("%s is not accesible" % GCDialer._loginURL, UserWarning, 2)
+                       return False
+
                return self.isAuthed()
 
        def dial(self, number):
@@ -102,9 +116,15 @@ class GCDialer(object):
                if len(number) == 11 and number[0] == 1:
                        number = number[1:]
 
-               callSuccessPage = self._browser.download(
-                       GCDialer._clicktocallURL % (self._accessToken, number),
-                       None, {'Referer' : 'http://www.grandcentral.com/mobile/messages'} )
+               try:
+                       callSuccessPage = self._browser.download(
+                               GCDialer._clicktocallURL % (self._accessToken, number),
+                               None,
+                               {'Referer' : 'http://www.grandcentral.com/mobile/messages'}
+                       )
+               except urllib2.URLError, e:
+                       warnings.warn("%s is not accesible" % GCDialer._clicktocallURL, UserWarning, 2)
+                       return False
 
                if GCDialer._gcDialingStrRe.search(callSuccessPage) is not None:
                        return True
@@ -183,9 +203,16 @@ class GCDialer(object):
                @param callbacknumber should be a proper 10 digit number
                """
                print "setCallbackNumber %s" % (callbacknumber)
+
                callbackPostData = urllib.urlencode({'a_t' : self._accessToken, 'default_number' : callbacknumber })
-               callbackSetPage = self._browser.download(GCDialer._setforwardURL, callbackPostData)
+               try:
+                       callbackSetPage = self._browser.download(GCDialer._setforwardURL, callbackPostData)
+               except urllib2.URLError, e:
+                       warnings.warn("%s is not accesible" % GCDialer._setforwardURL, UserWarning, 2)
+                       return False
+
                self._browser.cookies.save()
+               return True
 
        def getCallbackNumber(self):
                """
@@ -200,7 +227,12 @@ class GCDialer(object):
                """
                @returns Iterable of (personsName, phoneNumber, date, action)
                """
-               recentCallsPage = self._browser.download(GCDialer._inboxallURL)
+               try:
+                       recentCallsPage = self._browser.download(GCDialer._inboxallURL)
+               except urllib2.URLError, e:
+                       warnings.warn("%s is not accesible" % GCDialer._inboxallURL, UserWarning, 2)
+                       return
+
                for match in self._inboxRe.finditer(recentCallsPage):
                        phoneNumber = match.group(4)
                        action = match.group(1)