Hopefully testing and fixes for forwarding numbers for GrandCentral
[gc-dialer] / src / gc_backend.py
index a12c77d..a5e550e 100644 (file)
@@ -44,7 +44,7 @@ class GCDialer(object):
        _accessTokenRe = re.compile(r"""<input type="hidden" name="a_t" [^>]*value="(.*)"/>""")
        _isLoginPageRe = re.compile(r"""<form method="post" action="https://www.grandcentral.com/mobile/account/login">""")
        _callbackRe = re.compile(r"""name="default_number" value="(\d+)" />\s+(.*)\s$""", re.M)
-       _accountNumRe = re.compile(r"""<img src="/images/mobile/inbox_logo.gif" alt="GrandCentral" />\s*(.{14})\s*&nbsp""", re.M)
+       _accountNumRe = re.compile(r"""<input type="hidden" name="gcentral_num" [^>]*value="(.*)"/>""")
        _inboxRe = re.compile(r"""<td>.*?(voicemail|received|missed|call return).*?</td>\s+<td>\s+<font size="2">\s+(.*?)\s+&nbsp;\|&nbsp;\s+<a href="/mobile/contacts/.*?">(.*?)\s?</a>\s+<br/>\s+(.*?)\s?<a href=""", re.S)
        _contactsRe = re.compile(r"""<a href="/mobile/contacts/detail/(\d+)">(.*?)</a>""", re.S)
        _contactsNextRe = re.compile(r""".*<a href="/mobile/contacts(\?page=\d+)">Next</a>""", re.S)
@@ -70,8 +70,9 @@ class GCDialer(object):
                        self._browser.cookies.load()
 
                self._accessToken = None
-               self._accountNum = None
+               self._accountNum = ""
                self._lastAuthed = 0.0
+               self._callbackNumber = ""
                self._callbackNumbers = {}
 
                self.__contacts = None
@@ -220,6 +221,7 @@ class GCDialer(object):
                Set the number that grandcental calls
                @param callbacknumber should be a proper 10 digit number
                """
+               self._callbackNumber = callbacknumber
                callbackPostData = urllib.urlencode({
                        'a_t': self._accessToken,
                        'default_number': callbacknumber
@@ -240,7 +242,7 @@ class GCDialer(object):
                for c in self._browser.cookies:
                        if c.name == "pda_forwarding_number":
                                return c.value
-               return None
+               return self._callbackNumber
 
        def get_recent(self):
                """
@@ -331,9 +333,10 @@ class GCDialer(object):
                self._accessToken = atGroup.group(1)
 
                anGroup = self._accountNumRe.search(data)
-               if anGroup is None:
-                       raise RuntimeError("Could not extract account number from GrandCentral")
-               self._accountNum = anGroup.group(1)
+               if anGroup is not None:
+                       self._accountNum = anGroup.group(1)
+               else:
+                       warnings.warn("Could not extract account number from GrandCentral", UserWarning, 2)
 
                self._callbackNumbers = {}
                for match in self._callbackRe.finditer(data):
@@ -346,7 +349,7 @@ def test_backend(username, password):
        print "Authenticated: ", backend.is_authed()
        print "Login?: ", backend.login(username, password)
        print "Authenticated: ", backend.is_authed()
-       print "Token: ", backend._accessToken
+       # print "Token: ", backend._accessToken
        print "Account: ", backend.get_account_number()
        print "Callback: ", backend.get_callback_number()
        # print "All Callback: ",