[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:32 UTC 2016


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

The following commit has been merged in the master branch:
commit 92483aa86f38a20ef97877a69c70f1b5da309805
Author: Martin Klapetek <martin.klapetek at gmail.com>
Date:   Mon Nov 19 15:39:48 2012 +0100

    Detect contact capabilities properly
    
    Reviewed-by: David Edmundson
    REVIEW: 107345
---
 kpeople/nepomuk-feeder/CMakeLists.txt              |  1 +
 kpeople/nepomuk-feeder/abstract-storage.h          |  2 +-
 kpeople/nepomuk-feeder/account.cpp                 |  8 +-
 kpeople/nepomuk-feeder/account.h                   |  4 +-
 .../nepomuk-feeder/capabilities-hack-private.cpp   | 93 ++++++++++++++++++++++
 kpeople/nepomuk-feeder/capabilities-hack-private.h | 39 +++++++++
 kpeople/nepomuk-feeder/contact.cpp                 |  2 +-
 kpeople/nepomuk-feeder/contact.h                   |  2 +-
 kpeople/nepomuk-feeder/controller.cpp              |  4 +-
 kpeople/nepomuk-feeder/nepomuk-storage.cpp         | 33 ++++++--
 kpeople/nepomuk-feeder/nepomuk-storage.h           |  2 +-
 11 files changed, 173 insertions(+), 17 deletions(-)

diff --git a/kpeople/nepomuk-feeder/CMakeLists.txt b/kpeople/nepomuk-feeder/CMakeLists.txt
index aa0907f..bae3b3e 100644
--- a/kpeople/nepomuk-feeder/CMakeLists.txt
+++ b/kpeople/nepomuk-feeder/CMakeLists.txt
@@ -48,6 +48,7 @@ set (CMAKE_CXX_FLAGS
 # First target - nepomuktelepathyservice static library
 
 set (nepomuktelepathyservice_static_SRCS
+     capabilities-hack-private.cpp
      controller.cpp
      account.cpp
      contact.cpp
diff --git a/kpeople/nepomuk-feeder/abstract-storage.h b/kpeople/nepomuk-feeder/abstract-storage.h
index b6aa32e..3c1ba5e 100644
--- a/kpeople/nepomuk-feeder/abstract-storage.h
+++ b/kpeople/nepomuk-feeder/abstract-storage.h
@@ -187,7 +187,7 @@ public Q_SLOTS:
      * \param id the id (e.g. me at example.com) that in conjunction with the \p path uniquely identifies the contact.
      * \param capabilities the complete list of capabilities of the contact.
      */
-    virtual void setContactCapabilities(const QString &path, const QString &id, const Tp::ContactCapabilities &capabilities) = 0;
+    virtual void setContactCapabilities(const QString &path, const QString &id, const Tp::ConnectionPtr &connection, const Tp::ContactCapabilities &capabilities) = 0;
 
     /**
      * Invoked to update the avatar of the Telepathy Contact.
diff --git a/kpeople/nepomuk-feeder/account.cpp b/kpeople/nepomuk-feeder/account.cpp
index 4fef2b2..a1ef2ad 100644
--- a/kpeople/nepomuk-feeder/account.cpp
+++ b/kpeople/nepomuk-feeder/account.cpp
@@ -197,8 +197,8 @@ void Account::onNewContact(const Tp::ContactPtr &contact)
                 SIGNAL(subscriptionStateChanged(QString,Tp::Contact::PresenceState)),
                 SLOT(onContactSubscriptionStateChanged(QString,Tp::Contact::PresenceState)));
         connect(c,
-                SIGNAL(capabilitiesChanged(QString,Tp::ContactCapabilities)),
-                SLOT(onContactCapabilitiesChanged(QString,Tp::ContactCapabilities)));
+                SIGNAL(capabilitiesChanged(QString,Tp::ConnectionPtr,Tp::ContactCapabilities)),
+                SLOT(onContactCapabilitiesChanged(QString,Tp::ConnectionPtr,Tp::ContactCapabilities)));
         connect(c,
                 SIGNAL(avatarChanged(QString,Tp::AvatarData)),
                 SLOT(onContactAvatarChanged(QString,Tp::AvatarData)));
@@ -250,9 +250,9 @@ 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)
+void Account::onContactCapabilitiesChanged(const QString &id, const Tp::ConnectionPtr &connection, const Tp::ContactCapabilities &capabilities)
 {
-    emit contactCapabilitiesChanged(m_account->objectPath(), id, capabilities);
+    emit contactCapabilitiesChanged(m_account->objectPath(), id, connection, capabilities);
 }
 
 void Account::onContactAvatarChanged(const QString &id, const Tp::AvatarData &avatar)
diff --git a/kpeople/nepomuk-feeder/account.h b/kpeople/nepomuk-feeder/account.h
index 0cac18c..32446f1 100644
--- a/kpeople/nepomuk-feeder/account.h
+++ b/kpeople/nepomuk-feeder/account.h
@@ -64,7 +64,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);
+    void contactCapabilitiesChanged(const QString &path, const QString &id, const Tp::ConnectionPtr &connection, const Tp::ContactCapabilities &capabilities);
     void contactAvatarChanged(const QString &path, const QString &id, const Tp::AvatarData &avatar);
 
 private Q_SLOTS:
@@ -83,7 +83,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);
+    void onContactCapabilitiesChanged(const QString &id, const Tp::ConnectionPtr &connection, const Tp::ContactCapabilities &capabilities);
     void onContactAvatarChanged(const QString &id, const Tp::AvatarData &avatar);
 
 private:
diff --git a/kpeople/nepomuk-feeder/capabilities-hack-private.cpp b/kpeople/nepomuk-feeder/capabilities-hack-private.cpp
new file mode 100644
index 0000000..46ba34e
--- /dev/null
+++ b/kpeople/nepomuk-feeder/capabilities-hack-private.cpp
@@ -0,0 +1,93 @@
+/*
+    Copyright (C) 2012 George Kiagiadakis <kiagiadakis.george at gmail.com>
+
+    This library is free software; you can redistribute it and/or modify
+    it under the terms of the GNU Lesser General Public License as published
+    by the Free Software Foundation; either version 2.1 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "capabilities-hack-private.h"
+
+/*
+ * This is a hack to workaround a gabble bug.
+ * https://bugs.freedesktop.org/show_bug.cgi?id=51978
+ */
+
+namespace CapabilitiesHackPrivate {
+
+static Tp::RequestableChannelClassSpec gabbleAudioCallRCC()
+{
+    static Tp::RequestableChannelClassSpec spec;
+
+    if (!spec.isValid()) {
+        Tp::RequestableChannelClass rcc;
+        rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
+                TP_QT_IFACE_CHANNEL_TYPE_CALL);
+        rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
+                (uint) Tp::HandleTypeContact);
+        rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"));
+        rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudioName"));
+        spec = Tp::RequestableChannelClassSpec(rcc);
+    }
+
+    return spec;
+}
+
+static Tp::RequestableChannelClassSpec gabbleVideoCallRCC()
+{
+    static Tp::RequestableChannelClassSpec spec;
+
+    if (!spec.isValid()) {
+        Tp::RequestableChannelClass rcc;
+        rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
+                TP_QT_IFACE_CHANNEL_TYPE_CALL);
+        rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
+                (uint) Tp::HandleTypeContact);
+        rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"));
+        rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideoName"));
+        spec = Tp::RequestableChannelClassSpec(rcc);
+    }
+
+    return spec;
+}
+
+bool audioCalls(const Tp::CapabilitiesBase &caps, const QString &cmName)
+{
+    bool gabbleResult = false;
+    if (cmName == QLatin1String("gabble")) {
+        Q_FOREACH (const Tp::RequestableChannelClassSpec &rccSpec, caps.allClassSpecs()) {
+            if (rccSpec.supports(gabbleAudioCallRCC())) {
+                gabbleResult = true;
+                break;
+            }
+        }
+    }
+
+    return gabbleResult || caps.audioCalls();
+}
+
+bool videoCalls(const Tp::CapabilitiesBase &caps, const QString &cmName)
+{
+    bool gabbleResult = false;
+    if (cmName == QLatin1String("gabble")) {
+        Q_FOREACH (const Tp::RequestableChannelClassSpec &rccSpec, caps.allClassSpecs()) {
+            if (rccSpec.supports(gabbleVideoCallRCC())) {
+                gabbleResult = true;
+                break;
+            }
+        }
+    }
+
+    return gabbleResult || caps.videoCalls();
+}
+
+}
diff --git a/kpeople/nepomuk-feeder/capabilities-hack-private.h b/kpeople/nepomuk-feeder/capabilities-hack-private.h
new file mode 100644
index 0000000..aa3478f
--- /dev/null
+++ b/kpeople/nepomuk-feeder/capabilities-hack-private.h
@@ -0,0 +1,39 @@
+/*
+    Copyright (C) 2012 George Kiagiadakis <kiagiadakis.george at gmail.com>
+
+    This library is free software; you can redistribute it and/or modify
+    it under the terms of the GNU Lesser General Public License as published
+    by the Free Software Foundation; either version 2.1 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CAPABILITIES_HACK_PRIVATE_H
+#define CAPABILITIES_HACK_PRIVATE_H
+
+#include <KTp/ktp-export.h>
+#include <TelepathyQt/CapabilitiesBase>
+
+/*
+ * This is a hack to workaround a gabble bug.
+ * https://bugs.freedesktop.org/show_bug.cgi?id=51978
+ */
+
+namespace CapabilitiesHackPrivate {
+
+/* Equivalent to caps.audioCalls() */
+KTP_NO_EXPORT bool audioCalls(const Tp::CapabilitiesBase &caps, const QString &cmName);
+
+/* Equivalent to caps.videoCalls() */
+KTP_NO_EXPORT bool videoCalls(const Tp::CapabilitiesBase &caps, const QString &cmName);
+
+}
+
+#endif
diff --git a/kpeople/nepomuk-feeder/contact.cpp b/kpeople/nepomuk-feeder/contact.cpp
index 9bc953d..af392db 100644
--- a/kpeople/nepomuk-feeder/contact.cpp
+++ b/kpeople/nepomuk-feeder/contact.cpp
@@ -151,7 +151,7 @@ void Contact::onSubscriptionStateChanged(Tp::Contact::PresenceState state)
 
 void Contact::onCapabilitiesChanged(const Tp::ContactCapabilities &capabilities)
 {
-    emit capabilitiesChanged(m_contact->id(), capabilities);
+    emit capabilitiesChanged(m_contact->id(), m_contact->manager()->connection(), capabilities);
 }
 
 void Contact::onAvatarDataChanged(const Tp::AvatarData &avatar)
diff --git a/kpeople/nepomuk-feeder/contact.h b/kpeople/nepomuk-feeder/contact.h
index e8d7044..e1e6142 100644
--- a/kpeople/nepomuk-feeder/contact.h
+++ b/kpeople/nepomuk-feeder/contact.h
@@ -51,7 +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);
+    void capabilitiesChanged(const QString &id, const Tp::ConnectionPtr &connection, const Tp::ContactCapabilities &capabilities);
     void avatarChanged(const QString &id, const Tp::AvatarData &avatar);
 
 private Q_SLOTS:
diff --git a/kpeople/nepomuk-feeder/controller.cpp b/kpeople/nepomuk-feeder/controller.cpp
index 8e7dcf8..db2919f 100644
--- a/kpeople/nepomuk-feeder/controller.cpp
+++ b/kpeople/nepomuk-feeder/controller.cpp
@@ -163,8 +163,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)));
+    connect(acc, SIGNAL(contactCapabilitiesChanged(QString,QString,Tp::ConnectionPtr,Tp::ContactCapabilities)),
+            m_storage, SLOT(setContactCapabilities(QString,QString,Tp::ConnectionPtr,Tp::ContactCapabilities)));
     connect(acc, SIGNAL(contactAvatarChanged(QString,QString,Tp::AvatarData)),
             m_storage, SLOT(setContactAvatar(QString,QString,Tp::AvatarData)));
 
diff --git a/kpeople/nepomuk-feeder/nepomuk-storage.cpp b/kpeople/nepomuk-feeder/nepomuk-storage.cpp
index 25d432d..0ab6cba 100644
--- a/kpeople/nepomuk-feeder/nepomuk-storage.cpp
+++ b/kpeople/nepomuk-feeder/nepomuk-storage.cpp
@@ -23,6 +23,7 @@
 
 #include "nepomuk-storage.h"
 #include "telepathy.h"
+#include "capabilities-hack-private.h"
 
 #include <KDebug>
 #include <KJob>
@@ -48,6 +49,7 @@
 
 #include <TelepathyQt/Constants>
 #include <TelepathyQt/AvatarData>
+#include <TelepathyQt/Connection>
 
 using namespace Nepomuk2::Vocabulary;
 using namespace Soprano::Vocabulary;
@@ -815,23 +817,44 @@ void NepomukStorage::setContactSubscriptionState(const QString &path,
 }
 
 void NepomukStorage::setContactCapabilities(const QString &path,
-                                           const QString &id,
-                                           const Tp::ContactCapabilities &capabilities)
+                                            const QString &id,
+                                            const Tp::ConnectionPtr &connection,
+                                            const Tp::ContactCapabilities &capabilities)
 {
     ContactResources contact = findContact(path, id);
     if( contact.isEmpty() )
         return;
 
+    bool audioCallsCap = false;
+    bool videoCallsCap = false;
+
+    if (connection) {
+        bool contactCanStreamAudio = CapabilitiesHackPrivate::audioCalls(
+            capabilities, connection->cmName());
+        bool selfCanStreamAudio = CapabilitiesHackPrivate::audioCalls(
+            connection->selfContact()->capabilities(), connection->cmName());
+        audioCallsCap = contactCanStreamAudio && selfCanStreamAudio;
+
+        bool contactCanStreamVideo = CapabilitiesHackPrivate::videoCalls(
+            capabilities, connection->cmName());
+        bool selfCanStreamVideo = CapabilitiesHackPrivate::videoCalls(
+            connection->selfContact()->capabilities(), connection->cmName());
+        videoCallsCap = contactCanStreamVideo && selfCanStreamVideo;
+    }
+
     Nepomuk2::SimpleResource &imAccount = m_graph[contact.imAccount()];
 
     // For each supported (by the ontology) capability, check it and save the correct value
     // FIXME: Add other caps to the ontologies so that we can add them here.
-    if (capabilities.textChats())
+    if (capabilities.textChats()) {
         imAccount.addProperty( NCO::hasIMCapability(), NCO::imCapabilityText() );
-    if (capabilities.streamedMediaAudioCalls())
+    }
+    if (audioCallsCap) {
         imAccount.addProperty( NCO::hasIMCapability(), NCO::imCapabilityAudio() );
-    if (capabilities.streamedMediaVideoCalls())
+    }
+    if (videoCallsCap) {
         imAccount.addProperty( NCO::hasIMCapability(), NCO::imCapabilityVideo() );
+    }
 
     fireGraphTimer();
 }
diff --git a/kpeople/nepomuk-feeder/nepomuk-storage.h b/kpeople/nepomuk-feeder/nepomuk-storage.h
index 05c6acb..a8df92f 100644
--- a/kpeople/nepomuk-feeder/nepomuk-storage.h
+++ b/kpeople/nepomuk-feeder/nepomuk-storage.h
@@ -135,7 +135,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);
+    virtual void setContactCapabilities(const QString &path, const QString &id, const Tp::ConnectionPtr &connection, const Tp::ContactCapabilities &capabilities);
     virtual void setContactAvatar(const QString &path, const QString &id, const Tp::AvatarData &avatar);
 
 signals:

-- 
ktp-common-internals packaging



More information about the pkg-kde-commits mailing list