3 from __future__ import with_statement
4 from __future__ import division
6 import QtMobility.Contacts as QtContacts
9 class QtContactsAddressBook(object):
11 def __init__(self, name, uri):
14 self._manager = QtContacts.QContactManager.fromUri(uri)
23 return self._manager.error()
25 def update_account(self, force = True):
26 if not force and self._contacts is not None:
28 self._contacts = dict(self._get_contacts())
30 def get_contacts(self):
31 if self._contacts is None:
32 self._contacts = dict(self._get_contacts())
35 def _get_contacts(self):
36 contacts = self._manager.contacts()
37 for contact in contacts:
38 contactId = contact.localId()
39 contactName = contact.displayLabel()
40 phoneDetails = contact.details(QtContacts.QContactPhoneNumber().DefinitionName)
41 phones = [{"phoneType": "Phone", "phoneNumber": phone.value(QtContacts.QContactPhoneNumber().FieldNumber)} for phone in phoneDetails]
42 contactDetails = phones
43 if 0 < len(contactDetails):
44 yield str(contactId), {
45 "contactId": str(contactId),
47 "numbers": contactDetails,
51 class _QtContactsAddressBookFactory(object):
54 self._availableManagers = {}
56 availableMgrs = QtContacts.QContactManager.availableManagers()
57 availableMgrs.remove("invalid")
58 for managerName in availableMgrs:
60 managerUri = QtContacts.QContactManager.buildUri(managerName, params)
61 self._availableManagers[managerName] = managerUri
63 def get_addressbooks(self):
64 for name, uri in self._availableManagers.iteritems():
65 book = QtContactsAddressBook(name, uri)
67 print "Could not load %r due to %r" % (name, book.error)
72 class _EmptyAddressBookFactory(object):
74 def get_addressbooks(self):
79 if QtContacts is not None:
80 QtContactsAddressBookFactory = _QtContactsAddressBookFactory
82 QtContactsAddressBookFactory = _EmptyAddressBookFactory
83 print "QtContacts support not available"
86 if __name__ == "__main__":
87 factory = QtContactsAddressBookFactory()
88 books = factory.get_addressbooks()
91 print book.get_contacts()