Various bug fixes and tweaks found through 0, 1, and 2
[gc-dialer] / src / gv_backend.py
index 620461a..29021c2 100644 (file)
@@ -98,19 +98,6 @@ def itergroup(iterator, count, padValue = None):
        return itertools.izip(*nIterators)
 
 
-def abbrev_relative_date(date):
-       """
-       >>> abbrev_relative_date("42 hours ago")
-       '42 h'
-       >>> abbrev_relative_date("2 days ago")
-       '2 d'
-       >>> abbrev_relative_date("4 weeks ago")
-       '4 w'
-       """
-       parts = date.split(" ")
-       return "%s %s" % (parts[0], parts[1][0])
-
-
 class GVDialer(object):
        """
        This class encapsulates all of the knowledge necessary to interace with the grandcentral servers
@@ -141,7 +128,7 @@ class GVDialer(object):
                @returns If authenticated
                """
 
-               if (time.time() - self._lastAuthed) < 60 and not force:
+               if (time.time() - self._lastAuthed) < 120 and not force:
                        return True
 
                try:
@@ -288,10 +275,9 @@ class GVDialer(object):
                @returns a dictionary mapping call back numbers to descriptions
                @note These results are cached for 30 minutes.
                """
-               if time.time() - self._lastAuthed < 1800 or self.is_authed():
-                       return self._callbackNumbers
-
-               return {}
+               if not self.is_authed():
+                       return {}
+               return self._callbackNumbers
 
        _setforwardURL = "https://www.google.com//voice/m/setphone"
 
@@ -301,26 +287,28 @@ class GVDialer(object):
                @param callbacknumber should be a proper 10 digit number
                """
                self._callbackNumber = callbacknumber
-               callbackPostData = urllib.urlencode({
-                       '_rnr_se': self._token,
-                       'phone': callbacknumber
-               })
-               try:
-                       callbackSetPage = self._browser.download(self._setforwardURL, callbackPostData)
-               except urllib2.URLError, e:
-                       warnings.warn(traceback.format_exc())
-                       raise RuntimeError("%s is not accesible" % self._setforwardURL)
 
-               self._browser.cookies.save()
+               # Currently this isn't working out in GoogleVoice, but thats ok, we pass the callback on dial
+               #callbackPostData = urllib.urlencode({
+               #       '_rnr_se': self._token,
+               #       'phone': callbacknumber
+               #})
+               #try:
+               #       callbackSetPage = self._browser.download(self._setforwardURL, callbackPostData)
+               #       self._browser.cookies.save()
+               #except urllib2.URLError, e:
+               #       warnings.warn(traceback.format_exc())
+               #       raise RuntimeError("%s is not accesible" % self._setforwardURL)
+
                return True
 
        def get_callback_number(self):
                """
                @returns Current callback number or None
                """
-               for c in self._browser.cookies:
-                       if c.name == "gv-ph":
-                               return c.value
+               #for c in self._browser.cookies:
+               #       if c.name == "gv-ph":
+               #               return c.value
                return self._callbackNumber
 
        def get_recent(self):
@@ -333,7 +321,6 @@ class GVDialer(object):
                ]
                sortedRecent.sort(reverse = True)
                for exactDate, name, number, relativeDate, action in sortedRecent:
-                       relativeDate = abbrev_relative_date(relativeDate)
                        yield name, number, relativeDate, action
 
        def get_addressbooks(self):
@@ -386,7 +373,7 @@ class GVDialer(object):
                        for contact in self.__contacts:
                                yield contact
 
-       _contactDetailPhoneRe = re.compile(r"""<div.*?>([0-9\-\(\) \t]+?)<span.*?>\((\w+)\)</span>""", re.S)
+       _contactDetailPhoneRe = re.compile(r"""<div.*?>([0-9+\-\(\) \t]+?)<span.*?>\((\w+)\)</span>""", re.S)
        _contactDetailURL = "https://www.google.com/voice/mobile/contact"
 
        def get_contact_details(self, contactId):
@@ -430,7 +417,6 @@ class GVDialer(object):
                sortedMessages = list(allMessages)
                sortedMessages.sort(reverse=True)
                for exactDate, header, number, relativeDate, message in sortedMessages:
-                       relativeDate = abbrev_relative_date(relativeDate)
                        yield header, number, relativeDate, message
 
        def _grab_json(self, flatXml):
@@ -492,7 +478,7 @@ class GVDialer(object):
                @returns Iterable of (personsName, phoneNumber, exact date, relative date, action)
                """
                for action, url in (
-                       ("Recieved", self._receivedCallsURL),
+                       ("Received", self._receivedCallsURL),
                        ("Missed", self._missedCallsURL),
                        ("Placed", self._placedCallsURL),
                ):
@@ -516,7 +502,7 @@ class GVDialer(object):
                                        header = "Unknown"
                                yield header, recentCallData["number"], exactTime, recentCallData["relTime"], action
 
-       _seperateVoicemailsRegex = re.compile(r"""^\s*<div id="(\w+)"\s* class="gc-message.*?">""", re.MULTILINE | re.DOTALL)
+       _seperateVoicemailsRegex = re.compile(r"""^\s*<div id="(\w+)"\s* class=".*?gc-message.*?">""", re.MULTILINE | re.DOTALL)
        _exactVoicemailTimeRegex = re.compile(r"""<span class="gc-message-time">(.*?)</span>""", re.MULTILINE)
        _relativeVoicemailTimeRegex = re.compile(r"""<span class="gc-message-relative">(.*?)</span>""", re.MULTILINE)
        _voicemailNameRegex = re.compile(r"""<a class=.*?gc-message-name-link.*?>(.*?)</a>""", re.MULTILINE | re.DOTALL)