[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