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
32 class EvolutionAddressBook(object):
34 @note Combined the factory and the addressbook for "simplicity" and "cutting down" the number of allocations/deallocations
37 def __init__(self, bookId = None):
38 if not self.is_supported():
41 self._phoneTypes = None
42 if bookId is not None:
48 for bookData in self.get_addressbooks()
53 self._book = evolution.ebook.open_addressbook(self._bookId)
56 def is_supported(cls):
57 return evolution is not None
59 def get_addressbooks(self):
61 @returns Iterable of (Address Book Factory, Book Id, Book Name)
63 if not self.is_supported():
66 if len(evolution.ebook.list_addressbooks()) == 0 and evolution.ebook.open_addressbook('default') is not None:
67 # It appears that Maemo's e-d-s does not always list the default addressbook, so we're faking it being listed
68 yield self, "default", "Maemo"
70 for bookId in evolution.ebook.list_addressbooks():
71 yield self, bookId[1], bookId[0]
73 def open_addressbook(self, bookId):
75 self._book = evolution.ebook.open_addressbook(self._bookId)
79 def contact_source_short_name(contactId):
86 def get_contacts(self):
88 @returns Iterable of (contact id, contact name)
90 if not self.is_supported():
93 for contact in self._book.get_all_contacts():
94 yield str(contact.get_uid()), contact.props.full_name
96 def get_contact_details(self, contactId):
98 @returns Iterable of (Phone Type, Phone Number)
100 contact = self._book.get_contact(int(contactId))
102 if self._phoneTypes is None and contact is not None:
103 self._phoneTypes = [pt for pt in dir(contact.props) if "phone" in pt.lower()]
105 for phoneType in self._phoneTypes:
106 phoneNumber = getattr(contact.props, phoneType)
107 if isinstance(phoneNumber, str):
108 yield phoneType, phoneNumber
111 def print_evobooks():
113 Included here for debugging.
115 Either insert it into the code or launch python with the "-i" flag
117 if not EvolutionAddressBook.is_supported():
118 print "No Evolution Support"
121 eab = EvolutionAddressBook()
122 for book in eab.get_addressbooks():
123 eab = eab.open_addressbook(book[1])
125 for contact in eab.get_contacts():
127 for details in eab.get_contact_details(contact[0]):
128 print "\t\t", details