Merging in TOR changes
authorEd Page <eopage@byu.net>
Sun, 14 Feb 2010 03:23:09 +0000 (21:23 -0600)
committerEd Page <eopage@byu.net>
Sun, 14 Feb 2010 03:23:09 +0000 (21:23 -0600)
src/backends/browser_emu.py
src/backends/gv_backend.py
src/backends/gvoice.py

index 3d9972e..12d5e61 100644 (file)
@@ -33,7 +33,7 @@ import socket
 
 
 _moduleLogger = logging.getLogger("browser_emu")
-socket.setdefaulttimeout(10)
+socket.setdefaulttimeout(20)
 
 
 class MozillaEmulator(object):
@@ -41,8 +41,9 @@ class MozillaEmulator(object):
        def __init__(self, trycount = 1):
                """Create a new MozillaEmulator object.
 
-               @param trycount: The download() method will retry the operation if it fails. You can specify -1 for infinite retrying.
-                        A value of 0 means no retrying. A value of 1 means one retry. etc."""
+               @param trycount: The download() method will retry the operation if it
+               fails. You can specify -1 for infinite retrying.  A value of 0 means no
+               retrying. A value of 1 means one retry. etc."""
                self.debug = False
                self.trycount = trycount
                self._cookies = cookielib.LWPCookieJar()
@@ -94,7 +95,7 @@ class MozillaEmulator(object):
 
                @return: The raw HTML page data
                """
-               _moduleLogger.info("Performing download of %s" % url)
+               _moduleLogger.debug("Performing download of %s" % url)
 
                if extraheaders is None:
                        extraheaders = {}
@@ -115,13 +116,14 @@ class MozillaEmulator(object):
                                        return openerdirector
 
                                return self._read(openerdirector, trycount)
-                       except urllib2.URLError:
+                       except urllib2.URLError, e:
+                               _moduleLogger.debug("%s: %s" % (e, url))
                                cnt += 1
                                if (-1 < trycount) and (trycount < cnt):
                                        raise
 
                        # Retry :-)
-                       _moduleLogger.info("MozillaEmulator: urllib2.URLError, retryting %d" % cnt)
+                       _moduleLogger.debug("MozillaEmulator: urllib2.URLError, retrying %d" % cnt)
 
        def _build_opener(self, url, postdata = None, extraheaders = None, forbidRedirect = False):
                if extraheaders is None:
@@ -154,7 +156,7 @@ class MozillaEmulator(object):
                )
                u.addheaders = [(
                        'User-Agent',
-                       'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4'
+                       'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4 (.NET CLR 3.5.30729)'
                )]
                if not postdata is None:
                        req.add_data(postdata)
index 16aef65..fb49621 100644 (file)
@@ -27,6 +27,7 @@ Resources
 
 from __future__ import with_statement
 
+import itertools
 import logging
 
 import gvoice
@@ -175,7 +176,9 @@ class GVDialer(object):
                )
 
        def get_messages(self):
-               conversations = self._gvoice.get_conversations()
+               voicemails = self._gvoice.get_voicemails()
+               smss = self._gvoice.get_texts()
+               conversations = itertools.chain(voicemails, smss)
                for conversation in conversations:
                        messages = conversation.messages
                        messageParts = (
index 3399424..0279b79 100755 (executable)
@@ -101,7 +101,7 @@ class Message(object):
 class Conversation(object):
 
        TYPE_VOICEMAIL = "Voicemail"
-       TYPE_SMS = "Texts"
+       TYPE_SMS = "SMS"
 
        def __init__(self):
                self.type = None
@@ -477,21 +477,21 @@ class GVoiceBackend(object):
                        if contactId != "0":
                                yield contactId, contactDetails
 
-       def get_conversations(self):
+       def get_voicemails(self):
                voicemailPage = self._get_page(self._XML_VOICEMAIL_URL)
                voicemailHtml = self._grab_html(voicemailPage)
                voicemailJson = self._grab_json(voicemailPage)
                parsedVoicemail = self._parse_voicemail(voicemailHtml)
                voicemails = self._merge_conversation_sources(parsedVoicemail, voicemailJson)
+               return voicemails
 
+       def get_texts(self):
                smsPage = self._get_page(self._XML_SMS_URL)
                smsHtml = self._grab_html(smsPage)
                smsJson = self._grab_json(smsPage)
                parsedSms = self._parse_sms(smsHtml)
                smss = self._merge_conversation_sources(parsedSms, smsJson)
-
-               allConversations = itertools.chain(voicemails, smss)
-               return allConversations
+               return smss
 
        def mark_message(self, messageId, asRead):
                postData = {
@@ -546,10 +546,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):
@@ -801,13 +797,13 @@ def validate_response(response):
 
 
 def guess_phone_type(number):
-       if number.startswith("747") or number.startswith("1747"):
+       if number.startswith("747") or number.startswith("1747") or number.startswith("+1747"):
                return GVoiceBackend.PHONE_TYPE_GIZMO
        else:
                return GVoiceBackend.PHONE_TYPE_MOBILE
 
 
-def set_sane_callback(backend):
+def get_sane_callback(backend):
        """
        Try to set a sane default callback number on these preferences
        1) 1747 numbers ( Gizmo )
@@ -818,7 +814,9 @@ def set_sane_callback(backend):
        numbers = backend.get_callback_numbers()
 
        priorityOrderedCriteria = [
+               ("\+1747", None),
                ("1747", None),
+               ("747", None),
                (None, "gizmo"),
                (None, "computer"),
                (None, "sip"),
@@ -826,13 +824,31 @@ def set_sane_callback(backend):
        ]
 
        for numberCriteria, descriptionCriteria in priorityOrderedCriteria:
+               numberMatcher = None
+               descriptionMatcher = None
+               if numberCriteria is not None:
+                       numberMatcher = re.compile(numberCriteria)
+               elif descriptionCriteria is not None:
+                       descriptionMatcher = re.compile(descriptionCriteria, re.I)
+
                for number, description in numbers.iteritems():
-                       if numberCriteria is not None and re.compile(numberCriteria).match(number) is None:
+                       if numberMatcher is not None and numberMatcher.match(number) is None:
                                continue
-                       if descriptionCriteria is not None and re.compile(descriptionCriteria).match(description) is None:
+                       if descriptionMatcher is not None and descriptionMatcher.match(description) is None:
                                continue
-                       backend.set_callback_number(number)
-                       return
+                       return number
+
+
+def set_sane_callback(backend):
+       """
+       Try to set a sane default callback number on these preferences
+       1) 1747 numbers ( Gizmo )
+       2) anything with gizmo in the name
+       3) anything with computer in the name
+       4) the first value
+       """
+       number = get_sane_callback(backend)
+       backend.set_callback_number(number)
 
 
 def _is_not_special(name):