[SCM] ktp-common-internals packaging branch, master, updated. debian/15.12.1-2-1839-gf0635e9

Maximiliano Curia maxy at moszumanska.debian.org
Mon May 9 09:05:33 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-common-internals.git;a=commitdiff;h=f9c86e1

The following commit has been merged in the master branch:
commit f9c86e11cfb7068cdb63648bc95742795360ffa1
Author: David Edmundson <kde at davidedmundson.co.uk>
Date:   Sun Sep 9 16:53:37 2012 +0100

    Add a class providing a GlobalContact list throughout all accounts
---
 KTp/CMakeLists.txt             |   2 +
 KTp/global-contact-manager.cpp | 155 +++++++++++++++++++++++++++++++++++++++++
 KTp/global-contact-manager.h   |  58 +++++++++++++++
 3 files changed, 215 insertions(+)

diff --git a/KTp/CMakeLists.txt b/KTp/CMakeLists.txt
index fa0c741..ae65dc7 100644
--- a/KTp/CMakeLists.txt
+++ b/KTp/CMakeLists.txt
@@ -5,6 +5,7 @@ set (ktp_common_internals_private_SRCS
      circular-countdown.cpp
      debug.cpp
      error-dictionary.cpp
+     global-contact-manager.cpp
      global-presence.cpp
      presence.cpp
      service-availability-checker.cpp
@@ -19,6 +20,7 @@ set (ktp_common_internals_private_HDRS
      circular-countdown.h
      debug.h
      error-dictionary.h
+     global-contact-manager.h
      global-presence.h
      presence.h
      service-availability-checker.h
diff --git a/KTp/global-contact-manager.cpp b/KTp/global-contact-manager.cpp
new file mode 100644
index 0000000..e4715ff
--- /dev/null
+++ b/KTp/global-contact-manager.cpp
@@ -0,0 +1,155 @@
+#include "global-contact-manager.h"
+
+#include <TelepathyQt/AccountManager>
+#include <TelepathyQt/Account>
+#include <TelepathyQt/ContactManager>
+
+#include <KDebug>
+
+using namespace KTp;
+
+class GlobalContactManagerPrivate {
+public:
+    Tp::AccountManagerPtr accountManager;
+};
+
+AccountContact::AccountContact(const Tp::AccountPtr &account, const Tp::ContactPtr &contact)
+{
+    m_account = account;
+    m_contact = contact;
+}
+
+Tp::AccountPtr AccountContact::account() const
+{
+    return m_account;
+}
+
+Tp::ContactPtr AccountContact::contact() const
+{
+    return m_contact;
+}
+
+
+GlobalContactManager::GlobalContactManager(QObject *parent) :
+    QObject(parent),
+    d(new GlobalContactManagerPrivate())
+{
+}
+
+GlobalContactManager::~GlobalContactManager()
+{
+    delete d;
+}
+
+
+void GlobalContactManager::setAccountManager(const Tp::AccountManagerPtr &accountManager)
+{
+    if (! d->accountManager.isNull()) {
+        kWarning() << "account manager already set";
+        return;
+    }
+
+    if (!accountManager->isReady()) {
+        kWarning() << "account manager not ready";
+        return;
+    }
+
+    d->accountManager = accountManager;
+
+    Q_FOREACH(const Tp::AccountPtr &account, accountManager->allAccounts()) {
+        onNewAccount(account);
+    }
+    connect(accountManager.data(), SIGNAL(newAccount(Tp::AccountPtr)), SLOT(onNewAccount(Tp::AccountPtr)));
+}
+
+AccountContactList GlobalContactManager::allKnownContacts()
+{
+    AccountContactList allContacts;
+
+    if (d->accountManager.isNull()) {
+        return allContacts;
+    }
+
+    Q_FOREACH(const Tp::AccountPtr &account, d->accountManager->allAccounts()) {
+        if (!account->connection().isNull() && account->connection()->contactManager()->state() == Tp::ContactListStateSuccess) {
+            Q_FOREACH(const Tp::ContactPtr &contact, account->connection()->contactManager()->allKnownContacts()) {
+                allContacts.append(AccountContact(account, contact));
+            }
+        }
+    }
+    return allContacts;
+}
+
+void GlobalContactManager::onNewAccount(const Tp::AccountPtr &account)
+{
+    onConnectionChanged(account->connection());
+    connect(account.data(), SIGNAL(connectionChanged(Tp::ConnectionPtr)), SLOT(onConnectionChanged(Tp::ConnectionPtr)));
+}
+
+
+void GlobalContactManager::onConnectionChanged(const Tp::ConnectionPtr &connection)
+{
+    if (connection.isNull()) {
+        return;
+    }
+    onContactManagerStateChanged(connection->contactManager(), connection->contactManager()->state());
+    connect(connection->contactManager().data(), SIGNAL(stateChanged(Tp::ContactListState)), SLOT(onContactManagerStateChanged(Tp::ContactListState)));
+}
+
+void GlobalContactManager::onContactManagerStateChanged(Tp::ContactListState state)
+{
+    Tp::ContactManager* contactManager = qobject_cast<Tp::ContactManager*>(sender());
+    Q_ASSERT(contactManager);
+    onContactManagerStateChanged(Tp::ContactManagerPtr(contactManager), state);
+}
+
+void GlobalContactManager::onContactManagerStateChanged(const Tp::ContactManagerPtr &contactManager, Tp::ContactListState state)
+{
+    //contact manager still isn't ready. Do nothing.
+    if (state != Tp::ContactListStateSuccess) {
+        return;
+    }
+
+    onAllKnownContactsChanged(contactManager, contactManager->allKnownContacts(), Tp::Contacts(), Tp::Channel::GroupMemberChangeDetails());
+    connect(contactManager.data(), SIGNAL(allKnownContactsChanged(Tp::Contacts,Tp::Contacts,Tp::Channel::GroupMemberChangeDetails)), SLOT(onAllKnownContactsChanged(Tp::Contacts,Tp::Contacts,Tp::Channel::GroupMemberChangeDetails)));
+}
+
+void GlobalContactManager::onAllKnownContactsChanged(const Tp::Contacts &contactsAdded, const Tp::Contacts &contactsRemoved, const Tp::Channel::GroupMemberChangeDetails &details)
+{
+    Tp::ContactManager* contactManager = qobject_cast<Tp::ContactManager*>(sender());
+    Q_ASSERT(contactManager);
+    onAllKnownContactsChanged(Tp::ContactManagerPtr(contactManager), contactsAdded, contactsRemoved, details);
+}
+
+void GlobalContactManager::onAllKnownContactsChanged(const Tp::ContactManagerPtr &contactManager, const Tp::Contacts &contactsAdded, const Tp::Contacts &contactsRemoved, const Tp::Channel::GroupMemberChangeDetails &details)
+{
+    Q_UNUSED(details);
+    const Tp::AccountPtr account = accountForContactManager(contactManager);
+
+    AccountContactList contactsToAdd;
+    AccountContactList contactsToRemove;
+
+    Q_FOREACH (const Tp::ContactPtr &contact, contactsAdded) {
+        contactsToAdd << AccountContact(account, contact);
+    }
+    Q_FOREACH (const Tp::ContactPtr &contact, contactsRemoved) {
+        contactsToRemove << AccountContact(account, contact);
+    }
+
+    Q_EMIT allKnownContactsChanged(contactsToAdd, contactsToRemove);
+}
+
+Tp::AccountPtr GlobalContactManager::accountForContactManager(const Tp::ContactManagerPtr &contactManager) const
+{
+    Tp::ConnectionPtr connection = contactManager->connection();
+
+    //loop through all accounts looking for a matching connection.
+    //arguably inneficient, but no. of accounts is normally very low, and it's not called very often.
+    Q_FOREACH(const Tp::AccountPtr &account, d->accountManager->allAccounts()) {
+        if (account->connection() == connection) {
+            return account;
+        }
+    }
+
+    return Tp::AccountPtr();
+}
diff --git a/KTp/global-contact-manager.h b/KTp/global-contact-manager.h
new file mode 100644
index 0000000..63bc7b5
--- /dev/null
+++ b/KTp/global-contact-manager.h
@@ -0,0 +1,58 @@
+#ifndef GLOBALCONTACTMANAGER_H
+#define GLOBALCONTACTMANAGER_H
+
+#include <QObject>
+
+#include <TelepathyQt/Types>
+#include <TelepathyQt/ContactManager>
+
+#include <KTp/ktp-export.h>
+
+namespace KTp {
+
+class KTP_EXPORT AccountContact {
+public:
+    AccountContact(const Tp::AccountPtr &account, const Tp::ContactPtr &contact);
+    Tp::AccountPtr account() const;
+    Tp::ContactPtr contact() const;
+private:
+    Tp::AccountPtr m_account;
+    Tp::ContactPtr m_contact;
+};
+
+typedef QList<AccountContact> AccountContactList;
+
+class GlobalContactManagerPrivate;
+
+class KTP_EXPORT GlobalContactManager : public QObject
+{
+    Q_OBJECT
+public:
+    explicit GlobalContactManager(QObject *parent = 0);
+    virtual ~GlobalContactManager();
+    
+    void setAccountManager(const Tp::AccountManagerPtr &accountManager);
+
+    AccountContactList allKnownContacts();
+
+Q_SIGNALS:
+    void allKnownContactsChanged(const AccountContactList &contactsAdded, const AccountContactList &contactsRemoved);
+    void presencePublicationRequested(const AccountContactList &contacts);
+
+private Q_SLOTS:
+    void onNewAccount(const Tp::AccountPtr &account);
+    void onConnectionChanged(const Tp::ConnectionPtr &connection);
+    void onContactManagerStateChanged(Tp::ContactListState state);
+    void onAllKnownContactsChanged (const Tp::Contacts &contactsAdded, const Tp::Contacts &contactsRemoved, const Tp::Channel::GroupMemberChangeDetails &details);
+    
+private:
+    void onContactManagerStateChanged(const Tp::ContactManagerPtr &contactManager, Tp::ContactListState state);
+    void onAllKnownContactsChanged (const Tp::ContactManagerPtr &contactManager, const Tp::Contacts &contactsAdded, const Tp::Contacts &contactsRemoved, const Tp::Channel::GroupMemberChangeDetails &details);
+
+    Tp::AccountPtr accountForContactManager(const Tp::ContactManagerPtr &contactManager) const;
+
+    GlobalContactManagerPrivate *d;
+};
+}
+
+#endif // GLOBALCONTACTLIST_H

-- 
ktp-common-internals packaging



More information about the pkg-kde-commits mailing list