#!/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
"""
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]
- self._book = evolution.ebook.open_addressbook(self._bookId[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
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, bookId[0]
-
+ yield self, bookId[1], bookId[0]
+
def open_addressbook(self, bookId):
self._bookId = bookId
- self._book = evolution.ebook.open_addressbook(self._bookId[1])
+ self._book = evolution.ebook.open_addressbook(self._bookId)
return self
+ @staticmethod
+ 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)
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()]
if isinstance(phoneNumber, str):
yield phoneType, phoneNumber
-def print_addressbooks():
+
+def print_evobooks():
"""
Included here for debugging.