[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