Autogenerating todos
[gc-dialer] / src / evo_backend.py
index 6af0012..0c64645 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 
-# GC Dialer - Front end for Google's Grand Central service.
+# DialCentral - Front end for Google's Grand Central service.
 # Copyright (C) 2008  Eric Warnke ericew AT gmail DOT com
 # 
 # This library is free software; you can redistribute it and/or
 
 """
 Evolution Contact Support
+
+It seems the evolution contact API used is specific to the desktop.  evolution.ebook combined with abook is what is needed for Maemo.
+       http://maemo.org/maemo_release_documentation/maemo4.1.x/node8.html#SECTION00870000000000000000
+       https://garage.maemo.org/svn/pymaemo/packages/python-abook/trunk/tests/ especially contact_get_iter amd filter_model
+       http://pymaemo.garage.maemo.org/documentation/api/abook/index.html
 """
 
 
@@ -30,15 +35,28 @@ except ImportError:
 
 
 class EvolutionAddressBook(object):
+       """
+       @note Combined the factory and the addressbook for "simplicity" and "cutting down" the number of allocations/deallocations
+       """
 
        def __init__(self, bookId = None):
                if not self.is_supported():
                        return
 
                self._phoneTypes = None
-               self._bookId = bookId if bookId is not None else self.get_addressbooks().next()[1]
+               if bookId is not None:
+                       self._bookId = bookId
+               else:
+                       try:
+                               self._bookId = [
+                                       bookData[1]
+                                               for bookData in self.get_addressbooks()
+                               ][0]
+                       except IndexError:
+                               global evolution
+                               evolution = None
                self._book = evolution.ebook.open_addressbook(self._bookId)
-       
+
        @classmethod
        def is_supported(cls):
                return evolution is not None
@@ -50,18 +68,26 @@ class EvolutionAddressBook(object):
                if not self.is_supported():
                        return
 
+               if len(evolution.ebook.list_addressbooks()) == 0 and evolution.ebook.open_addressbook('default') is not None:
+                       # It appears that Maemo's e-d-s does not always list the default addressbook, so we're faking it being listed
+                       yield self, "default", "Maemo"
+
                for bookId in evolution.ebook.list_addressbooks():
                        yield self, bookId[1], bookId[0]
-       
+
        def open_addressbook(self, bookId):
                self._bookId = bookId
                self._book = evolution.ebook.open_addressbook(self._bookId)
                return self
 
        @staticmethod
-       def factory_name():
+       def contact_source_short_name(contactId):
                return "Evo"
 
+       @staticmethod
+       def factory_name():
+               return "Evolution"
+
        def get_contacts(self):
                """
                @returns Iterable of (contact id, contact name)
@@ -70,13 +96,13 @@ class EvolutionAddressBook(object):
                        return
 
                for contact in self._book.get_all_contacts():
-                       yield contact.get_uid(), contact.props.full_name
-       
+                       yield str(contact.get_uid()), contact.props.full_name
+
        def get_contact_details(self, contactId):
                """
                @returns Iterable of (Phone Type, Phone Number)
                """
-               contact = self._book.get_contact(contactId)
+               contact = self._book.get_contact(int(contactId))
 
                if self._phoneTypes is None and contact is not None:
                        self._phoneTypes = [pt for pt in dir(contact.props) if "phone" in pt.lower()]
@@ -86,7 +112,8 @@ class EvolutionAddressBook(object):
                        if isinstance(phoneNumber, str):
                                yield phoneType, phoneNumber
 
-def print_addressbooks():
+
+def print_evobooks():
        """
        Included here for debugging.