Adding fancier version checks to allow to the cache to be preserved longer
[theonering] / src / gvoice / backend.py
index be7174a..19275f8 100755 (executable)
@@ -48,7 +48,7 @@ except ImportError:
 import browser_emu
 
 
-_moduleLogger = logging.getLogger("gvoice.backend")
+_moduleLogger = logging.getLogger(__name__)
 
 
 class NetworkError(RuntimeError):
@@ -364,12 +364,16 @@ class GVoiceBackend(object):
                )
                self._parse_with_validation(page)
 
-       def send_sms(self, phoneNumber, message):
-               phoneNumber = self._send_validation(phoneNumber)
+       def send_sms(self, phoneNumbers, message):
+               validatedPhoneNumbers = [
+                       self._send_validation(phoneNumber)
+                       for phoneNumber in phoneNumbers
+               ]
+               flattenedPhoneNumbers = ",".join(validatedPhoneNumbers)
                page = self._get_page_with_token(
                        self._sendSmsURL,
                        {
-                               'phoneNumber': phoneNumber,
+                               'phoneNumber': flattenedPhoneNumbers,
                                'text': message
                        },
                )
@@ -546,10 +550,6 @@ class GVoiceBackend(object):
                        raise ValueError('Number is not valid: "%s"' % number)
                elif not self.is_authed():
                        raise RuntimeError("Not Authenticated")
-
-               if len(number) == 11 and number[0] == 1:
-                       # Strip leading 1 from 11 digit dialing
-                       number = number[1:]
                return number
 
        def _parse_history(self, historyHtml):
@@ -557,7 +557,7 @@ class GVoiceBackend(object):
                for messageId, messageHtml in itergroup(splitVoicemail[1:], 2):
                        exactTimeGroup = self._exactVoicemailTimeRegex.search(messageHtml)
                        exactTime = exactTimeGroup.group(1).strip() if exactTimeGroup else ""
-                       exactTime = datetime.datetime.strptime(exactTime, "%m/%d/%y %I:%M %p")
+                       exactTime = google_strptime(exactTime)
                        relativeTimeGroup = self._relativeVoicemailTimeRegex.search(messageHtml)
                        relativeTime = relativeTimeGroup.group(1).strip() if relativeTimeGroup else ""
                        locationGroup = self._voicemailLocationRegex.search(messageHtml)
@@ -605,7 +605,7 @@ class GVoiceBackend(object):
 
                        exactTimeGroup = self._exactVoicemailTimeRegex.search(messageHtml)
                        exactTimeText = exactTimeGroup.group(1).strip() if exactTimeGroup else ""
-                       conv.time = datetime.datetime.strptime(exactTimeText, "%m/%d/%y %I:%M %p")
+                       conv.time = google_strptime(exactTimeText)
                        relativeTimeGroup = self._relativeVoicemailTimeRegex.search(messageHtml)
                        conv.relTime = relativeTimeGroup.group(1).strip() if relativeTimeGroup else ""
                        locationGroup = self._voicemailLocationRegex.search(messageHtml)
@@ -655,7 +655,7 @@ class GVoiceBackend(object):
 
                        exactTimeGroup = self._exactVoicemailTimeRegex.search(messageHtml)
                        exactTimeText = exactTimeGroup.group(1).strip() if exactTimeGroup else ""
-                       conv.time = datetime.datetime.strptime(exactTimeText, "%m/%d/%y %I:%M %p")
+                       conv.time = google_strptime(exactTimeText)
                        relativeTimeGroup = self._relativeVoicemailTimeRegex.search(messageHtml)
                        conv.relTime = relativeTimeGroup.group(1).strip() if relativeTimeGroup else ""
                        conv.location = ""
@@ -722,6 +722,19 @@ class GVoiceBackend(object):
                return json
 
 
+def google_strptime(time):
+       """
+       Hack: Google always returns the time in the same locale.  Sadly if the
+       local system's locale is different, there isn't a way to perfectly handle
+       the time.  So instead we handle implement some time formatting
+       """
+       abbrevTime = time[:-3]
+       parsedTime = datetime.datetime.strptime(abbrevTime, "%m/%d/%y %I:%M")
+       if time[-2] == "PN":
+               parsedTime += datetime.timedelta(hours=12)
+       return parsedTime
+
+
 def itergroup(iterator, count, padValue = None):
        """
        Iterate in groups of 'count' values. If there