3 from __future__ import with_statement
4 from __future__ import division
8 from dialcentral.util import qt_compat
9 if qt_compat.USES_PYSIDE:
11 import QtMobility.Contacts as _QtContacts
12 QtContacts = _QtContacts
21 _moduleLogger = logging.getLogger(__name__)
24 class QtContactsAddressBook(object):
26 def __init__(self, name, uri):
29 self._manager = QtContacts.QContactManager.fromUri(uri)
38 return self._manager.error()
40 def update_account(self, force = True):
41 if not force and self._contacts is not None:
43 self._contacts = dict(self._get_contacts())
45 def get_contacts(self):
46 if self._contacts is None:
47 self._contacts = dict(self._get_contacts())
50 def _get_contacts(self):
51 contacts = self._manager.contacts()
52 for contact in contacts:
53 contactId = contact.localId()
54 contactName = contact.displayLabel()
55 phoneDetails = contact.details(QtContacts.QContactPhoneNumber().DefinitionName)
56 phones = [{"phoneType": "Phone", "phoneNumber": phone.value(QtContacts.QContactPhoneNumber().FieldNumber)} for phone in phoneDetails]
57 contactDetails = phones
58 if 0 < len(contactDetails):
59 yield str(contactId), {
60 "contactId": str(contactId),
62 "numbers": contactDetails,
66 class _QtContactsAddressBookFactory(object):
69 self._availableManagers = {}
71 availableMgrs = QtContacts.QContactManager.availableManagers()
72 availableMgrs.remove("invalid")
73 for managerName in availableMgrs:
75 managerUri = QtContacts.QContactManager.buildUri(managerName, params)
76 self._availableManagers[managerName] = managerUri
78 def get_addressbooks(self):
79 for name, uri in self._availableManagers.iteritems():
80 book = QtContactsAddressBook(name, uri)
82 _moduleLogger.info("Could not load %r due to %r" % (name, book.error))
87 class _EmptyAddressBookFactory(object):
89 def get_addressbooks(self):
94 if QtContacts is not None:
95 QtContactsAddressBookFactory = _QtContactsAddressBookFactory
97 QtContactsAddressBookFactory = _EmptyAddressBookFactory
98 _moduleLogger.info("QtContacts support not available")
101 if __name__ == "__main__":
102 factory = QtContactsAddressBookFactory()
103 books = factory.get_addressbooks()
106 print book.get_contacts()