[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:07:19 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-common-internals.git;a=commitdiff;h=6df73d7
The following commit has been merged in the master branch:
commit 6df73d798afeb8411637d7b27bbf461a9d33e399
Author: George Goldberg <george.goldberg at collabora.co.uk>
Date: Tue Jun 14 15:03:58 2011 +0100
Add support for Contact Capabilities, along with a unit test for the storage-side implementation.
Reviewed-By: Daniele Domenichelli <daniele.domenichelli at gmail.com>
REVIEW: 101613
BUG: 270865
---
kpeople/nepomuk-feeder/abstract-storage.h | 4 +-
kpeople/nepomuk-feeder/account.cpp | 10 +-
kpeople/nepomuk-feeder/account.h | 4 +-
kpeople/nepomuk-feeder/contact.cpp | 2 +-
kpeople/nepomuk-feeder/contact.h | 3 +-
kpeople/nepomuk-feeder/controller.cpp | 4 +-
kpeople/nepomuk-feeder/nepomuk-storage.cpp | 47 +++++++++-
kpeople/nepomuk-feeder/nepomuk-storage.h | 3 +-
kpeople/nepomuk-feeder/tests/controller-test.h | 4 +-
kpeople/nepomuk-feeder/tests/storage-test.cpp | 123 +++++++++++++++++++++++++
kpeople/nepomuk-feeder/tests/storage-test.h | 1 +
11 files changed, 196 insertions(+), 9 deletions(-)
diff --git a/kpeople/nepomuk-feeder/abstract-storage.h b/kpeople/nepomuk-feeder/abstract-storage.h
index 7d1be9b..72aa703 100644
--- a/kpeople/nepomuk-feeder/abstract-storage.h
+++ b/kpeople/nepomuk-feeder/abstract-storage.h
@@ -1,7 +1,7 @@
/*
* This file is part of telepathy-nepomuk-service
*
- * Copyright (C) 2010 Collabora Ltd. <info at collabora.co.uk>
+ * Copyright (C) 2010-2011 Collabora Ltd. <info at collabora.co.uk>
* @author George Goldberg <george.goldberg at collabora.co.uk>
*
* This library is free software; you can redistribute it and/or
@@ -26,6 +26,7 @@
#include <QtCore/QString>
#include <TelepathyQt4/Contact>
+#include <TelepathyQt4/ContactCapabilities>
#include <TelepathyQt4/Types>
/**
@@ -55,6 +56,7 @@ public Q_SLOTS:
virtual void setContactBlockStatus(const QString &path, const QString &id, bool blocked) = 0;
virtual void setContactPublishState(const QString &path, const QString &id, const Tp::Contact::PresenceState &state) = 0;
virtual void setContactSubscriptionState(const QString &path, const QString &id, const Tp::Contact::PresenceState &state) = 0;
+ virtual void setContactCapabilities(const QString &path, const QString &id, const Tp::ContactCapabilities &capabilities) = 0;
private:
Q_DISABLE_COPY(AbstractStorage);
diff --git a/kpeople/nepomuk-feeder/account.cpp b/kpeople/nepomuk-feeder/account.cpp
index e0cfdf0..3aa197c 100644
--- a/kpeople/nepomuk-feeder/account.cpp
+++ b/kpeople/nepomuk-feeder/account.cpp
@@ -1,7 +1,7 @@
/*
* This file is part of telepathy-nepomuk-service
*
- * Copyright (C) 2009-2010 Collabora Ltd. <info at collabora.co.uk>
+ * Copyright (C) 2009-2011 Collabora Ltd. <info at collabora.co.uk>
* @author George Goldberg <george.goldberg at collabora.co.uk>
*
* This library is free software; you can redistribute it and/or
@@ -182,6 +182,9 @@ void Account::onNewContact(const Tp::ContactPtr &contact)
connect(c,
SIGNAL(subscriptionStateChanged(QString,Tp::Contact::PresenceState)),
SLOT(onContactSubscriptionStateChanged(QString,Tp::Contact::PresenceState)));
+ connect(c,
+ SIGNAL(capabilitiesChanged(QString,Tp::ContactCapabilities)),
+ SLOT(onContactCapabilitiesChanged(QString,Tp::ContactCapabilities)));
c->init();
}
@@ -230,6 +233,11 @@ void Account::onContactSubscriptionStateChanged(const QString &id, const Tp::Con
emit contactSubscriptionStateChanged(m_account->objectPath(), id, state);
}
+void Account::onContactCapabilitiesChanged(const QString &id, const Tp::ContactCapabilities &capabilities)
+{
+ emit contactCapabilitiesChanged(m_account->objectPath(), id, capabilities);
+}
+
#include "account.moc"
diff --git a/kpeople/nepomuk-feeder/account.h b/kpeople/nepomuk-feeder/account.h
index b57ebf8..f52e1d7 100644
--- a/kpeople/nepomuk-feeder/account.h
+++ b/kpeople/nepomuk-feeder/account.h
@@ -1,7 +1,7 @@
/*
* This file is part of telepathy-nepomuk-service
*
- * Copyright (C) 2009-2010 Collabora Ltd. <info at collabora.co.uk>
+ * Copyright (C) 2009-2011 Collabora Ltd. <info at collabora.co.uk>
* @author George Goldberg <george.goldberg at collabora.co.uk>
*
* This library is free software; you can redistribute it and/or
@@ -63,6 +63,7 @@ Q_SIGNALS:
void contactBlockStatusChanged(const QString &path, const QString &id, bool blocked);
void contactPublishStateChanged(const QString &path, const QString &id, const Tp::Contact::PresenceState &state);
void contactSubscriptionStateChanged(const QString &path, const QString &id, const Tp::Contact::PresenceState &state);
+ void contactCapabilitiesChanged(const QString &path, const QString &id, const Tp::ContactCapabilities &capabilities);
private Q_SLOTS:
void onConnectionStatusChanged(Tp::ConnectionStatus status);
@@ -79,6 +80,7 @@ private Q_SLOTS:
void onContactBlockStatusChanged(const QString &id, bool blocked);
void onContactPublishStateChanged(const QString &id, const Tp::Contact::PresenceState &state);
void onContactSubscriptionStateChanged(const QString &id, const Tp::Contact::PresenceState &state);
+ void onContactCapabilitiesChanged(const QString &id, const Tp::ContactCapabilities &capabilities);
private:
Q_DISABLE_COPY(Account);
diff --git a/kpeople/nepomuk-feeder/contact.cpp b/kpeople/nepomuk-feeder/contact.cpp
index bc5a291..cb5dcfd 100644
--- a/kpeople/nepomuk-feeder/contact.cpp
+++ b/kpeople/nepomuk-feeder/contact.cpp
@@ -139,7 +139,7 @@ void Contact::onSubscriptionStateChanged(Tp::Contact::PresenceState state)
void Contact::onCapabilitiesChanged(const Tp::ContactCapabilities &capabilities)
{
- // FIXME: Implement me!
+ emit capabilitiesChanged(m_contact->id(), capabilities);
}
diff --git a/kpeople/nepomuk-feeder/contact.h b/kpeople/nepomuk-feeder/contact.h
index ccc482a..54630c3 100644
--- a/kpeople/nepomuk-feeder/contact.h
+++ b/kpeople/nepomuk-feeder/contact.h
@@ -1,7 +1,7 @@
/*
* This file is part of telepathy-nepomuk-service
*
- * Copyright (C) 2010 Collabora Ltd. <info at collabora.co.uk>
+ * Copyright (C) 2010-2011 Collabora Ltd. <info at collabora.co.uk>
* @author George Goldberg <george.goldberg at collabora.co.uk>
*
* This library is free software; you can redistribute it and/or
@@ -51,6 +51,7 @@ Q_SIGNALS:
void blockStatusChanged(const QString &id, bool blocked);
void publishStateChanged(const QString &id, const Tp::Contact::PresenceState &state);
void subscriptionStateChanged(const QString &id, const Tp::Contact::PresenceState &state);
+ void capabilitiesChanged(const QString &id, const Tp::ContactCapabilities &capabilities);
private Q_SLOTS:
void onAliasChanged(const QString &alias);
diff --git a/kpeople/nepomuk-feeder/controller.cpp b/kpeople/nepomuk-feeder/controller.cpp
index f320326..9e0b2af 100644
--- a/kpeople/nepomuk-feeder/controller.cpp
+++ b/kpeople/nepomuk-feeder/controller.cpp
@@ -1,7 +1,7 @@
/*
* This file is part of telepathy-nepomuk-service
*
- * Copyright (C) 2009-2010 Collabora Ltd. <info at collabora.co.uk>
+ * Copyright (C) 2009-2011 Collabora Ltd. <info at collabora.co.uk>
* @author George Goldberg <george.goldberg at collabora.co.uk>
*
* This library is free software; you can redistribute it and/or
@@ -140,6 +140,8 @@ void Controller::onNewAccount(const Tp::AccountPtr &account)
m_storage, SLOT(setContactPublishState(QString,QString,Tp::Contact::PresenceState)));
connect(acc, SIGNAL(contactSubscriptionStateChanged(QString,QString,Tp::Contact::PresenceState)),
m_storage, SLOT(setContactSubscriptionState(QString,QString,Tp::Contact::PresenceState)));
+ connect(acc, SIGNAL(contactCapabilitiesChanged(QString,QString,Tp::ContactCapabilities)),
+ m_storage, SLOT(setContactCapabilities(QString,QString,Tp::ContactCapabilities)));
// Now the signal connections are done, initialise the account.
acc->init();
diff --git a/kpeople/nepomuk-feeder/nepomuk-storage.cpp b/kpeople/nepomuk-feeder/nepomuk-storage.cpp
index 7d15449..d1ec631 100644
--- a/kpeople/nepomuk-feeder/nepomuk-storage.cpp
+++ b/kpeople/nepomuk-feeder/nepomuk-storage.cpp
@@ -1,7 +1,7 @@
/*
* This file is part of telepathy-nepomuk-service
*
- * Copyright (C) 2009-2010 Collabora Ltd. <info at collabora.co.uk>
+ * Copyright (C) 2009-2011 Collabora Ltd. <info at collabora.co.uk>
* @author George Goldberg <george.goldberg at collabora.co.uk>
*
* This library is free software; you can redistribute it and/or
@@ -25,6 +25,7 @@
#include "ontologies/nco.h"
#include "ontologies/pimo.h"
#include "ontologies/telepathy.h"
+#include "ontologies/imcapability.h"
#include <KDebug>
@@ -707,6 +708,50 @@ void NepomukStorage::setContactSubscriptionState(const QString &path,
}
}
+void NepomukStorage::setContactCapabilities(const QString &path,
+ const QString &id,
+ const Tp::ContactCapabilities &capabilities)
+{
+ ContactIdentifier identifier(path, id);
+
+ // Check the Contact exists.
+ Q_ASSERT(m_contacts.contains(identifier));
+ if (!m_contacts.contains(identifier)) {
+ kWarning() << "Contact not found.";
+ return;
+ }
+
+ ContactResources resources = m_contacts.value(identifier);
+
+ Nepomuk::IMAccount imAccount = resources.imAccount();
+
+ // For each supported (by the ontology) capability, check it and save the correct value
+ QSet<Nepomuk::IMCapability> caps(imAccount.iMCapabilitys().toSet());
+
+ if (capabilities.textChats()) {
+ caps.insert(Nepomuk::Vocabulary::NCO::imCapabilityText());
+ } else {
+ caps.remove(Nepomuk::Vocabulary::NCO::imCapabilityText());
+ }
+
+ if (capabilities.streamedMediaAudioCalls()) {
+ caps.insert(Nepomuk::Vocabulary::NCO::imCapabilityAudio());
+ } else {
+ caps.remove(Nepomuk::Vocabulary::NCO::imCapabilityAudio());
+ }
+
+ if (capabilities.streamedMediaVideoCalls()) {
+ caps.insert(Nepomuk::Vocabulary::NCO::imCapabilityVideo());
+ } else {
+ caps.remove(Nepomuk::Vocabulary::NCO::imCapabilityVideo());
+ }
+
+ // FIXME: Add other caps to the ontologies so that we can add them here.
+
+ // Save the new list of caps.
+ imAccount.setIMCapabilitys(caps.toList());
+}
+
int qHash(ContactIdentifier c)
{
diff --git a/kpeople/nepomuk-feeder/nepomuk-storage.h b/kpeople/nepomuk-feeder/nepomuk-storage.h
index 2162393..8ffb779 100644
--- a/kpeople/nepomuk-feeder/nepomuk-storage.h
+++ b/kpeople/nepomuk-feeder/nepomuk-storage.h
@@ -1,7 +1,7 @@
/*
* This file is part of telepathy-nepomuk-service
*
- * Copyright (C) 2009-2010 Collabora Ltd. <info at collabora.co.uk>
+ * Copyright (C) 2009-2011 Collabora Ltd. <info at collabora.co.uk>
* @author George Goldberg <george.goldberg at collabora.co.uk>
*
* This library is free software; you can redistribute it and/or
@@ -98,6 +98,7 @@ public Q_SLOTS:
virtual void setContactBlockStatus(const QString &path, const QString &id, bool blocked);
virtual void setContactPublishState(const QString &path, const QString &id, const Tp::Contact::PresenceState &state);
virtual void setContactSubscriptionState(const QString &path, const QString &id, const Tp::Contact::PresenceState &state);
+ virtual void setContactCapabilities(const QString &path, const QString &id, const Tp::ContactCapabilities &capabilities);
private Q_SLOTS:
void onNepomukError(const QString &uri, int errorCode);
diff --git a/kpeople/nepomuk-feeder/tests/controller-test.h b/kpeople/nepomuk-feeder/tests/controller-test.h
index cd85a67..d63a121 100644
--- a/kpeople/nepomuk-feeder/tests/controller-test.h
+++ b/kpeople/nepomuk-feeder/tests/controller-test.h
@@ -1,7 +1,7 @@
/*
* This file is part of nepomuktelepathyservice
*
- * Copyright (C) 2010 Collabora Ltd. <info at collabora.co.uk>
+ * Copyright (C) 2010-2011 Collabora Ltd. <info at collabora.co.uk>
* @author George Goldberg <george.goldberg at collabora.co.uk>
*
* This library is free software; you can redistribute it and/or
@@ -99,6 +99,7 @@ public Q_SLOTS:
virtual void setContactBlockStatus(const QString &, const QString &, bool) { }
virtual void setContactPublishState(const QString &, const QString &, const Tp::Contact::PresenceState &) { }
virtual void setContactSubscriptionState(const QString &, const QString &, const Tp::Contact::PresenceState &) { }
+ virtual void setContactCapabilities(const QString &, const QString &, const Tp::ContactCapabilities &) { }
private:
ControllerTest *m_test;
@@ -127,6 +128,7 @@ public Q_SLOTS:
virtual void setContactBlockStatus(const QString &, const QString &, bool) { }
virtual void setContactPublishState(const QString &, const QString &, const Tp::Contact::PresenceState &) { }
virtual void setContactSubscriptionState(const QString &, const QString &, const Tp::Contact::PresenceState &) { }
+ virtual void setContactCapabilities(const QString &, const QString &, const Tp::ContactCapabilities &) { }
private:
ControllerTest *m_test;
diff --git a/kpeople/nepomuk-feeder/tests/storage-test.cpp b/kpeople/nepomuk-feeder/tests/storage-test.cpp
index 2ff9428..4a78582 100644
--- a/kpeople/nepomuk-feeder/tests/storage-test.cpp
+++ b/kpeople/nepomuk-feeder/tests/storage-test.cpp
@@ -24,6 +24,8 @@
#include "test-backdoors.h"
#include "ontologies/contactgroup.h"
+#include "ontologies/imcapability.h"
+#include "ontologies/nco.h"
#include "ontologies/pimo.h"
#include <KDebug>
@@ -34,6 +36,19 @@
#include <qtest_kde.h>
+#include <TelepathyQt4/ContactCapabilities>
+
+class FakeContactCapabilities : public Tp::ContactCapabilities {
+
+public:
+ FakeContactCapabilities(Tp::RequestableChannelClassSpecList r, bool s)
+ : Tp::ContactCapabilities(r,s)
+ { }
+
+ ~FakeContactCapabilities()
+ { }
+};
+
StorageTest::StorageTest(QObject *parent)
: Test(parent),
m_storage(0)
@@ -1062,6 +1077,114 @@ void StorageTest::testSetContactSubscriptionState()
pC2.remove();
}
+void StorageTest::testSetContactCapabilities()
+{
+ // Create the Storage.
+ m_storage = new NepomukStorage(this);
+ QVERIFY(m_storage);
+
+ QHash<QString, Nepomuk::IMAccount> *accounts = TestBackdoors::nepomukStorageAccounts(m_storage);
+ QHash<ContactIdentifier, ContactResources> *contacts = TestBackdoors::nepomukStorageContacts(m_storage);
+
+ // Create an account on the storage.
+ m_storage->createAccount(QLatin1String("/foo/bar/baz"),
+ QLatin1String("foo at bar.baz"),
+ QLatin1String("test"));
+
+ // Check the Account is created
+ QCOMPARE(TestBackdoors::nepomukStorageAccounts(m_storage)->size(), 1);
+ QCOMPARE(TestBackdoors::nepomukStorageContacts(m_storage)->size(), 0);
+
+ // And in Nepomuk...
+ Nepomuk::IMAccount imAcc1 = accounts->value(QLatin1String("/foo/bar/baz"));
+ QVERIFY(imAcc1.exists());
+ QCOMPARE(imAcc1.isAccessedByOf().size(), 0);
+
+ // Create a contact
+ m_storage->createContact(QLatin1String("/foo/bar/baz"),
+ QLatin1String("test at remote-contact.com"));
+
+ // Check the Contact is created.
+ QCOMPARE(TestBackdoors::nepomukStorageAccounts(m_storage)->size(), 1);
+ QCOMPARE(TestBackdoors::nepomukStorageContacts(m_storage)->size(), 1);
+
+ // Check its identifier is correct.
+ ContactIdentifier cId2(QLatin1String("/foo/bar/baz"), QLatin1String("test at remote-contact.com"));
+ QVERIFY(contacts->contains(cId2));
+
+ // Check the Nepomuk resources are created correctly.
+ ContactResources cRes2 = contacts->value(cId2);
+ Nepomuk::IMAccount imAcc2 = cRes2.imAccount();
+ Nepomuk::PersonContact pC2 = cRes2.personContact();
+ QVERIFY(imAcc2.exists());
+ QVERIFY(pC2.exists());
+
+ // Check the default caps are empty
+ QCOMPARE(imAcc2.iMCapabilitys().size(), 0);
+
+ // Add text capability
+ Tp::RequestableChannelClassSpecList r1;
+ r1.append(Tp::RequestableChannelClassSpec::textChat());
+
+ m_storage->setContactCapabilities(QLatin1String("/foo/bar/baz"),
+ QLatin1String("test at remote-contact.com"),
+ FakeContactCapabilities(r1, true));
+
+ QCOMPARE(imAcc2.iMCapabilitys().size(), 1);
+ QVERIFY(imAcc2.iMCapabilitys().contains(Nepomuk::Vocabulary::NCO::imCapabilityText()));
+
+ // Add audio capability
+ Tp::RequestableChannelClassSpecList r2;
+ r2.append(Tp::RequestableChannelClassSpec::streamedMediaAudioCall());
+
+ m_storage->setContactCapabilities(QLatin1String("/foo/bar/baz"),
+ QLatin1String("test at remote-contact.com"),
+ FakeContactCapabilities(r2, true));
+
+ QCOMPARE(imAcc2.iMCapabilitys().size(), 1);
+ QVERIFY(imAcc2.iMCapabilitys().contains(Nepomuk::Vocabulary::NCO::imCapabilityAudio()));
+
+ // Add video capability
+ Tp::RequestableChannelClassSpecList r3;
+ r3.append(Tp::RequestableChannelClassSpec::streamedMediaVideoCall());
+
+ m_storage->setContactCapabilities(QLatin1String("/foo/bar/baz"),
+ QLatin1String("test at remote-contact.com"),
+ FakeContactCapabilities(r3, true));
+
+ QCOMPARE(imAcc2.iMCapabilitys().size(), 1);
+ QVERIFY(imAcc2.iMCapabilitys().contains(Nepomuk::Vocabulary::NCO::imCapabilityVideo()));
+
+ // Add three capabilities
+ Tp::RequestableChannelClassSpecList r4;
+ r4.append(Tp::RequestableChannelClassSpec::textChat());
+ r4.append(Tp::RequestableChannelClassSpec::streamedMediaAudioCall());
+ r4.append(Tp::RequestableChannelClassSpec::streamedMediaVideoCall());
+
+ m_storage->setContactCapabilities(QLatin1String("/foo/bar/baz"),
+ QLatin1String("test at remote-contact.com"),
+ FakeContactCapabilities(r4, true));
+
+ QCOMPARE(imAcc2.iMCapabilitys().size(), 3);
+ QVERIFY(imAcc2.iMCapabilitys().contains(Nepomuk::Vocabulary::NCO::imCapabilityText()));
+ QVERIFY(imAcc2.iMCapabilitys().contains(Nepomuk::Vocabulary::NCO::imCapabilityAudio()));
+ QVERIFY(imAcc2.iMCapabilitys().contains(Nepomuk::Vocabulary::NCO::imCapabilityVideo()));
+
+ // Set no capabilities
+ Tp::RequestableChannelClassSpecList r5;
+
+ m_storage->setContactCapabilities(QLatin1String("/foo/bar/baz"),
+ QLatin1String("test at remote-contact.com"),
+ FakeContactCapabilities(r5, true));
+
+ QCOMPARE(imAcc2.iMCapabilitys().size(), 0);
+
+ // Cleanup Nepomuk resources used in this test.
+ imAcc1.remove();
+ imAcc2.remove();
+ pC2.remove();
+}
+
void StorageTest::cleanup()
{
cleanupImpl();
diff --git a/kpeople/nepomuk-feeder/tests/storage-test.h b/kpeople/nepomuk-feeder/tests/storage-test.h
index ab5f05f..4a292de 100644
--- a/kpeople/nepomuk-feeder/tests/storage-test.h
+++ b/kpeople/nepomuk-feeder/tests/storage-test.h
@@ -53,6 +53,7 @@ private Q_SLOTS:
void testSetContactBlockedStatus();
void testSetContactPublishState();
void testSetContactSubscriptionState();
+ void testSetContactCapabilities();
void cleanup();
void cleanupTestCase();
--
ktp-common-internals packaging
More information about the pkg-kde-commits
mailing list