Added manager null check.
[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     if (!m_manager) {
56         qWarning() << "Manager is uninitialized";
57         return;
58     }
59
60     return m_contactGuids.value(facebookId);
61 }
62
63 void ContactManagerPrivate::requestContactGuids()
64 {
65     qDebug() << __PRETTY_FUNCTION__;
66
67     if (!m_manager) {
68         qWarning() << "Manager is uninitialized";
69         return;
70     }
71
72     QHash<QString, QString> contactGuids;
73
74     foreach (QContact contact, m_manager->contacts()) {
75         QContactOnlineAccount account = contact.detail(QContactOnlineAccount::DefinitionName);
76         QString facebookId = parseFacebookId(account.accountUri());
77         QContactGuid contactGuid = contact.detail(QContactGuid::DefinitionName);
78
79         if (!facebookId.isEmpty())
80             contactGuids.insert(facebookId, contactGuid.guid());
81     }
82
83     m_contactGuids = contactGuids;
84 }