Added ContactManager class.
[situare] / src / engine / contactmanagerprivate.cpp
1 #include <QContact>
2 #include <QContactGuid>
3 #include <QContactManager>
4 #include <QContactOnlineAccount>
5 #include <QDebug>
6 #include <QHash>
7 #include <QList>
8 #include <QStringList>
9
10 #include "contactmanager.h"
11
12 #include "contactmanagerprivate.h"
13
14 QTM_USE_NAMESPACE
15
16 ContactManagerPrivate::ContactManagerPrivate(QObject *parent)
17     : QObject(parent),
18       m_manager(0)
19 {
20     qDebug() << __PRETTY_FUNCTION__;
21
22     m_parent = static_cast<ContactManager *>(parent);
23
24     const QString MAEMO5_MANAGER_NAME = "maemo5";
25
26     QStringList availableManagers = QContactManager::availableManagers();
27
28     if (availableManagers.contains(MAEMO5_MANAGER_NAME)) {
29         QMap<QString, QString> params;
30         QString managerUri = QContactManager::buildUri(MAEMO5_MANAGER_NAME, params);
31         m_manager = QContactManager::fromUri(managerUri);
32     }
33 }
34
35 QString ContactManagerPrivate::parseFacebookId(const QString &accountUri) const
36 {
37     qDebug() << __PRETTY_FUNCTION__;
38
39     const QString FACEBOOK_CHAT_URL = "@chat.facebook.com";
40     int facebookChatUrlIndex = accountUri.indexOf(FACEBOOK_CHAT_URL);
41     QString facebookId;
42
43     if (facebookChatUrlIndex != -1) {
44         facebookId = accountUri.left(facebookChatUrlIndex);
45         facebookId.remove("-");
46     }
47
48     return facebookId;
49 }
50
51 QString ContactManagerPrivate::contactGuid(const QString &facebookId) const
52 {
53     qDebug() << __PRETTY_FUNCTION__;
54
55     return m_contactGuids.value(facebookId);
56 }
57
58 void ContactManagerPrivate::requestContactGuids()
59 {
60     qDebug() << __PRETTY_FUNCTION__;
61
62     if (!m_manager) {
63         qWarning() << "Manager is uninitialized";
64         return;
65     }
66
67     QHash<QString, QString> contactGuids;
68
69     foreach (QContact contact, m_manager->contacts()) {
70         QContactOnlineAccount account = contact.detail(QContactOnlineAccount::DefinitionName);
71         QString facebookId = parseFacebookId(account.accountUri());
72         QContactGuid contactGuid = contact.detail(QContactGuid::DefinitionName);
73
74         if (!facebookId.isEmpty())
75             contactGuids.insert(facebookId, contactGuid.guid());
76     }
77
78     m_contactGuids = contactGuids;
79 }