[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