Adding fancier version checks to allow to the cache to be preserved longer
[theonering] / src / gvoice / addressbook.py
index 99cd721..2f6c7e2 100644 (file)
@@ -4,14 +4,17 @@
 import logging
 
 import util.coroutines as coroutines
-import util.misc as util_misc
+import util.misc as misc_utils
 
 
-_moduleLogger = logging.getLogger("gvoice.addressbook")
+_moduleLogger = logging.getLogger(__name__)
 
 
 class Addressbook(object):
 
+       _RESPONSE_GOOD = 0
+       _RESPONSE_BLOCKED = 3
+
        def __init__(self, backend):
                self._backend = backend
                self._numbers = {}
@@ -44,10 +47,22 @@ class Addressbook(object):
                return self._numbers.iterkeys()
 
        def get_contact_name(self, strippedNumber):
+               """
+               @throws KeyError if contact not in list (so client can choose what to display)
+               """
                return self._numbers[strippedNumber][0]
 
        def get_phone_type(self, strippedNumber):
-               return self._numbers[strippedNumber][1]
+               try:
+                       return self._numbers[strippedNumber][1]
+               except KeyError:
+                       return "unknown"
+
+       def is_blocked(self, strippedNumber):
+               try:
+                       return self._numbers[strippedNumber][2]["response"] == self._RESPONSE_BLOCKED
+               except KeyError:
+                       return False
 
        def _populate_contacts(self):
                if self._numbers:
@@ -57,12 +72,12 @@ class Addressbook(object):
                        contactName = contactDetails["name"]
                        contactNumbers = (
                                (
+                                       misc_utils.normalize_number(numberDetails["phoneNumber"]),
                                        numberDetails.get("phoneType", "Mobile"),
-                                       util_misc.normalize_number(numberDetails["phoneNumber"]),
                                )
                                for numberDetails in contactDetails["numbers"]
                        )
                        self._numbers.update(
-                               (number, (contactName, phoneType))
-                               for (phoneType, number) in contactNumbers
+                               (number, (contactName, phoneType, contactDetails))
+                               for (number, phoneType) in contactNumbers
                        )