3 # DialCentral - Front end for Google's Grand Central service.
4 # Copyright (C) 2008 Eric Warnke ericew AT gmail DOT com
6 # This library is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU Lesser General Public
8 # License as published by the Free Software Foundation; either
9 # version 2.1 of the License, or (at your option) any later version.
11 # This library is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 # Lesser General Public License for more details.
16 # You should have received a copy of the GNU Lesser General Public
17 # License along with this library; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 Evolution Contact Support
24 It seems the evolution contact API used is specific to the desktop. evolution.ebook combined with abook is what is needed for Maemo.
25 http://maemo.org/maemo_release_documentation/maemo4.1.x/node8.html#SECTION00870000000000000000
26 https://garage.maemo.org/svn/pymaemo/packages/python-abook/trunk/tests/ especially contact_get_iter amd filter_model
27 http://pymaemo.garage.maemo.org/documentation/api/abook/index.html
37 class EvolutionAddressBook(object):
39 @note Combined the factory and the addressbook for "simplicity" and "cutting down" the number of allocations/deallocations
42 def __init__(self, bookId = None):
43 if not self.is_supported():
46 self._phoneTypes = None
47 if bookId is not None:
53 for bookData in self.get_addressbooks()
58 self._book = evolution.ebook.open_addressbook(self._bookId)
61 def is_supported(cls):
62 return evolution is not None
64 def get_addressbooks(self):
66 @returns Iterable of (Address Book Factory, Book Id, Book Name)
68 if not self.is_supported():
71 if len(evolution.ebook.list_addressbooks()) == 0 and evolution.ebook.open_addressbook('default') is not None:
72 # It appears that Maemo's e-d-s does not always list the default addressbook, so we're faking it being listed
73 yield self, "default", "Maemo"
75 for bookId in evolution.ebook.list_addressbooks():
76 yield self, bookId[1], bookId[0]
78 def open_addressbook(self, bookId):
80 self._book = evolution.ebook.open_addressbook(self._bookId)
84 def contact_source_short_name(contactId):
91 def get_contacts(self):
93 @returns Iterable of (contact id, contact name)
95 if not self.is_supported():
98 for contact in self._book.get_all_contacts():
99 yield str(contact.get_uid()), contact.props.full_name
101 def get_contact_details(self, contactId):
103 @returns Iterable of (Phone Type, Phone Number)
105 contact = self._book.get_contact(int(contactId))
107 if self._phoneTypes is None and contact is not None:
108 self._phoneTypes = [pt for pt in dir(contact.props) if "phone" in pt.lower()]
110 for phoneType in self._phoneTypes:
111 phoneNumber = getattr(contact.props, phoneType)
112 if isinstance(phoneNumber, str):
113 yield phoneType, phoneNumber
116 def print_evobooks():
118 Included here for debugging.
120 Either insert it into the code or launch python with the "-i" flag
122 if not EvolutionAddressBook.is_supported():
123 print "No Evolution Support"
126 eab = EvolutionAddressBook()
127 for book in eab.get_addressbooks():
128 eab = eab.open_addressbook(book[1])
130 for contact in eab.get_contacts():
132 for details in eab.get_contact_details(contact[0]):
133 print "\t\t", details