[SCM] ktp-kded-integration-module packaging branch, master, updated. debian/15.12.1-2-382-gbd961c2
Maximiliano Curia
maxy at moszumanska.debian.org
Sat May 28 00:14:30 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-kded-module.git;a=commitdiff;h=ddfd831
The following commit has been merged in the master branch:
commit ddfd8314b3999da3c61d53dc0ca7327bd82aa1b5
Author: Martin Klapetek <martin.klapetek at gmail.com>
Date: Tue Aug 21 16:51:54 2012 +0200
Use async dbus calls
Reviewed-by: George Kiagiadakis
REVIEW: 105813
---
telepathy-mpris.cpp | 129 ++++++++++++++++++++++++++++------------------------
telepathy-mpris.h | 7 +++
2 files changed, 76 insertions(+), 60 deletions(-)
diff --git a/telepathy-mpris.cpp b/telepathy-mpris.cpp
index a071160..71b0d24 100644
--- a/telepathy-mpris.cpp
+++ b/telepathy-mpris.cpp
@@ -70,63 +70,25 @@ void TelepathyMPRIS::onPlayerSignalReceived(const QString &interface, const QVar
return;
}
- bool trackInfoFound = false;
-
- QString artist;
- QString title;
- QString album;
- QString trackNumber;
-
- //FIXME We can do less lame parsing...maybe.
- Q_FOREACH (const QVariant &property, changedProperties.values()) { //krazy:exclude=foreach
- if (property.canConvert<QString>()) {
- if (property.toString() == QLatin1String("Paused") || property.toString() == QLatin1String("Stopped")) {
- setActive(false);
- return;
- }
-
- if (property.toString() == QLatin1String("Playing")) {
- QStringList mprisServices = QDBusConnection::sessionBus().interface()->registeredServiceNames().value().filter(QLatin1String("org.mpris.MediaPlayer2"));
-
- Q_FOREACH (const QString &service, mprisServices) {
- QDBusInterface mprisInterface(service, QLatin1String("/org/mpris/MediaPlayer2"), QLatin1String("org.mpris.MediaPlayer2.Player"));
- if (mprisInterface.property("PlaybackStatus") == QLatin1String("Playing")) {
- QMap<QString, QVariant> metadata = mprisInterface.property("Metadata").toMap();
- if (metadata.isEmpty()) {
- break;
- }
-
- artist = metadata.value(QLatin1String("xesam:artist")).toString();
- title = metadata.value(QLatin1String("xesam:title")).toString();
- album = metadata.value(QLatin1String("xesam:album")).toString();
- trackNumber = metadata.value(QLatin1String("xesam:trackNumber")).toString();
- trackInfoFound = true;
- break;
- }
-
- }
- }
+ //lookup if the PlaybackStatus was changed
+ if (changedProperties.keys().contains(QLatin1String("PlaybackStatus"))) {
+ if (changedProperties.value(QLatin1String("PlaybackStatus")) == QLatin1String("Playing")) {
+ m_playbackActive = true;
+ setTrackToPresence(m_lastReceivedMetadata);
+ } else {
+ //if the player is stopped or paused, deactivate and return to normal presence
+ m_playbackActive = false;
+ m_lastReceivedMetadata.clear();
+ setActive(false);
+ return;
}
}
- if (trackInfoFound) {
- //we replace track's info in custom nowPlayingText
- QString statusMessage = m_nowPlayingText;
- statusMessage.replace(QLatin1String("%title"), title, Qt::CaseInsensitive);
- statusMessage.replace(QLatin1String("%artist"), artist, Qt::CaseInsensitive);
- statusMessage.replace(QLatin1String("%album"), album, Qt::CaseInsensitive);
- statusMessage.replace(QLatin1String("%track"), trackNumber, Qt::CaseInsensitive);
-
- Tp::Presence currentPresence = m_globalPresence->currentPresence();
- Tp::SimplePresence presence;
-
- presence.type = currentPresence.type();
- presence.status = currentPresence.status();
- presence.statusMessage = statusMessage;
-
- setRequestedPresence(Tp::Presence(presence));
- if (m_presenceActivated) {
- setActive(true);
+ //track data change
+ if (changedProperties.keys().contains(QLatin1String("Metadata"))) {
+ m_lastReceivedMetadata = qdbus_cast<QMap<QString, QVariant> >(changedProperties.value(QLatin1String("Metadata")));
+ if (m_playbackActive) {
+ setTrackToPresence(m_lastReceivedMetadata);
}
}
}
@@ -139,12 +101,13 @@ void TelepathyMPRIS::detectPlayers()
Q_FOREACH (const QString &service, mprisServices) {
kDebug() << "Found mpris service:" << service;
- QDBusInterface mprisInterface(service, QLatin1String("/org/mpris/MediaPlayer2"), QLatin1String("org.mpris.MediaPlayer2.Player"));
- if (mprisInterface.property("PlaybackStatus") == QLatin1String("Playing")) {
- QVariantMap m;
- m.insert(QLatin1String("PlaybackStatus"), QVariant(QLatin1String("Playing")));
- onPlayerSignalReceived(QString(), m, QStringList());
- }
+ QDBusInterface mprisInterface(service, QLatin1String("/org/mpris/MediaPlayer2"), QLatin1String("org.freedesktop.DBus.Properties"));
+ QDBusPendingCall call = mprisInterface.asyncCall(QLatin1String("GetAll"),
+ QLatin1String("org.mpris.MediaPlayer2.Player"));
+
+ QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this);
+ connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
+ this, SLOT(onPlaybackStatusReceived(QDBusPendingCallWatcher*)));
//check if we are already watching this service
if (!m_knownPlayers.contains(service)) {
@@ -217,3 +180,49 @@ void TelepathyMPRIS::onDeactivateNowPlaying()
setActive(false);
}
}
+
+void TelepathyMPRIS::onPlaybackStatusReceived(QDBusPendingCallWatcher *watcher)
+{
+ QDBusPendingReply<QVariantMap> reply = *watcher;
+ if (reply.isError()) {
+ kWarning() << "Received error reply from DBus" << reply.error();
+ } else {
+ QVariantMap replyData = reply.value();
+ if (replyData.value(QLatin1String("PlaybackStatus")).toString() == QLatin1String("Playing")) {
+ setTrackToPresence(qdbus_cast<QMap<QString, QVariant> >(replyData.value(QLatin1String("Metadata")).value<QDBusArgument>()));
+ }
+ }
+
+ watcher->deleteLater();
+}
+
+void TelepathyMPRIS::setTrackToPresence(const QMap<QString, QVariant> &trackData)
+{
+ if (trackData.isEmpty()) {
+ return;
+ }
+
+ QString artist = trackData.value(QLatin1String("xesam:artist")).toString();
+ QString title = trackData.value(QLatin1String("xesam:title")).toString();
+ QString album = trackData.value(QLatin1String("xesam:album")).toString();
+ QString trackNumber = trackData.value(QLatin1String("xesam:trackNumber")).toString();
+
+ //we replace track's info in custom nowPlayingText
+ QString statusMessage = m_nowPlayingText;
+ statusMessage.replace(QLatin1String("%title"), title, Qt::CaseInsensitive);
+ statusMessage.replace(QLatin1String("%artist"), artist, Qt::CaseInsensitive);
+ statusMessage.replace(QLatin1String("%album"), album, Qt::CaseInsensitive);
+ statusMessage.replace(QLatin1String("%track"), trackNumber, Qt::CaseInsensitive);
+
+ Tp::Presence currentPresence = m_globalPresence->currentPresence();
+ Tp::SimplePresence presence;
+
+ presence.type = currentPresence.type();
+ presence.status = currentPresence.status();
+ presence.statusMessage = statusMessage;
+
+ setRequestedPresence(Tp::Presence(presence));
+ if (m_presenceActivated) {
+ setActive(true);
+ }
+}
diff --git a/telepathy-mpris.h b/telepathy-mpris.h
index de45cec..9937139 100644
--- a/telepathy-mpris.h
+++ b/telepathy-mpris.h
@@ -35,6 +35,8 @@ public:
QString pluginName() const;
+ void setTrackToPresence(const QMap<QString, QVariant> &trackData);
+
public Q_SLOTS:
void onPlayerSignalReceived(const QString &interface, const QVariantMap &changedProperties, const QStringList &invalidatedProperties);
void onSettingsChanged();
@@ -43,6 +45,8 @@ public Q_SLOTS:
void onActivateNowPlaying();
void onDeactivateNowPlaying();
+ void onPlaybackStatusReceived(QDBusPendingCallWatcher *watcher);
+
Q_SIGNALS:
void togglePlaybackActive(bool);
@@ -50,6 +54,9 @@ private:
QStringList m_knownPlayers;
bool m_presenceActivated;
QString m_nowPlayingText;
+
+ QVariantMap m_lastReceivedMetadata;
+ bool m_playbackActive;
};
#endif // TELEPATHY_MPRIS_H
--
ktp-kded-integration-module packaging
More information about the pkg-kde-commits
mailing list