[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