ace843667049230e3a8c7d9a5c77d94a611ca727
[gc-dialer] / hand_tests / qtcontacts.py
1 #!/usr/bin/env python
2
3 from __future__ import with_statement
4 from __future__ import division
5
6 import QtMobility.Contacts as QtContacts
7
8
9 class QtContactsAddressBook(object):
10
11         def __init__(self, name, uri):
12                 self._name = name
13                 self._uri = uri
14                 self._manager = QtContacts.QContactManager.fromUri(uri)
15                 self._contacts = None
16
17         @property
18         def name(self):
19                 return self._name
20
21         @property
22         def error(self):
23                 return self._manager.error()
24
25         def update_account(self, force = True):
26                 if not force and self._contacts is not None:
27                         return
28                 self._contacts = dict(self._get_contacts())
29
30         def get_contacts(self):
31                 if self._contacts is None:
32                         self._contacts = dict(self._get_contacts())
33                 return self._contacts
34
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),
46                                         "name": contactName,
47                                         "numbers": contactDetails,
48                                 }
49
50
51 class _QtContactsAddressBookFactory(object):
52
53         def __init__(self):
54                 self._availableManagers = {}
55
56                 availableMgrs = QtContacts.QContactManager.availableManagers()
57                 availableMgrs.remove("invalid")
58                 for managerName in availableMgrs:
59                         params = {}
60                         managerUri = QtContacts.QContactManager.buildUri(managerName, params)
61                         self._availableManagers[managerName] =  managerUri
62
63         def get_addressbooks(self):
64                 for name, uri in self._availableManagers.iteritems():
65                         book = QtContactsAddressBook(name, uri)
66                         if book.error:
67                                 print "Could not load %r due to %r" % (name, book.error)
68                         else:
69                                 yield book
70
71
72 class _EmptyAddressBookFactory(object):
73
74         def get_addressbooks(self):
75                 if False:
76                         yield None
77
78
79 if QtContacts is not None:
80         QtContactsAddressBookFactory = _QtContactsAddressBookFactory
81 else:
82         QtContactsAddressBookFactory = _EmptyAddressBookFactory
83         print "QtContacts support not available"
84
85
86 if __name__ == "__main__":
87         factory = QtContactsAddressBookFactory()
88         books = factory.get_addressbooks()
89         for book in books:
90                 print book.name
91                 print book.get_contacts()