3 from __future__ import with_statement
4 from __future__ import division
8 import util.qt_compat as qt_compat
9 if qt_compat.USES_PYSIDE:
10 import QtMobility.Contacts as _QtContacts
11 QtContacts = _QtContacts
18 _moduleLogger = logging.getLogger(__name__)
21 class QtContactsAddressBook(object):
23 def __init__(self, name, uri):
26 self._manager = QtContacts.QContactManager.fromUri(uri)
35 return self._manager.error()
37 def update_account(self, force = True):
38 if not force and self._contacts is not None:
40 self._contacts = dict(self._get_contacts())
42 def get_contacts(self):
43 if self._contacts is None:
44 self._contacts = dict(self._get_contacts())
47 def _get_contacts(self):
48 contacts = self._manager.contacts()
49 for contact in contacts:
50 contactId = contact.localId()
51 contactName = contact.displayLabel()
52 phoneDetails = contact.details(QtContacts.QContactPhoneNumber().DefinitionName)
53 phones = [{"phoneType": "Phone", "phoneNumber": phone.value(QtContacts.QContactPhoneNumber().FieldNumber)} for phone in phoneDetails]
54 contactDetails = phones
55 if 0 < len(contactDetails):
56 yield str(contactId), {
57 "contactId": str(contactId),
59 "numbers": contactDetails,
63 class _QtContactsAddressBookFactory(object):
66 self._availableManagers = {}
68 availableMgrs = QtContacts.QContactManager.availableManagers()
69 availableMgrs.remove("invalid")
70 for managerName in availableMgrs:
72 managerUri = QtContacts.QContactManager.buildUri(managerName, params)
73 self._availableManagers[managerName] = managerUri
75 def get_addressbooks(self):
76 for name, uri in self._availableManagers.iteritems():
77 book = QtContactsAddressBook(name, uri)
79 _moduleLogger.info("Could not load %r due to %r" % (name, book.error))
84 class _EmptyAddressBookFactory(object):
86 def get_addressbooks(self):
91 if QtContacts is not None:
92 QtContactsAddressBookFactory = _QtContactsAddressBookFactory
94 QtContactsAddressBookFactory = _EmptyAddressBookFactory
95 _moduleLogger.info("QtContacts support not available")
98 if __name__ == "__main__":
99 factory = QtContactsAddressBookFactory()
100 books = factory.get_addressbooks()
103 print book.get_contacts()