diff options
| author | Tomasz Sterna <tomek@xiaoka.com> | 2014-07-14 01:14:32 +0200 |
|---|---|---|
| committer | Tomasz Sterna <tomek@xiaoka.com> | 2014-07-14 01:14:32 +0200 |
| commit | 732018dc78916b8767bd811da39e528b3061af3a (patch) | |
| tree | bb088a8a9d280ae3e88311b72dcada655ee1a5eb /daemon/manager.cpp | |
| parent | 09d98ef6e6d32e73a6b3c74679adc8a49b0dee7e (diff) | |
Implemented pushing MPRIS metadata to watch Music app
Diffstat (limited to 'daemon/manager.cpp')
| -rw-r--r-- | daemon/manager.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/daemon/manager.cpp b/daemon/manager.cpp index be3946e..496f6d8 100644 --- a/daemon/manager.cpp +++ b/daemon/manager.cpp @@ -50,6 +50,8 @@ Manager::Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallMan session.connect("", "/org/mpris/MediaPlayer2", "org.freedesktop.DBus.Properties", "PropertiesChanged", this, SLOT(onMprisPropertiesChanged(QString,QMap<QString,QVariant>,QStringList))); + + connect(this, SIGNAL(mprisMetadataChanged(QVariantMap)), commands, SLOT(onMprisMetadataChanged(QVariantMap))); } void Manager::onPebbleChanged() @@ -76,6 +78,22 @@ void Manager::onConnectedChanged() if (!notification.publish()) { logger()->debug() << "Failed publishing notification"; } + + if (watch->isConnected()) { + QString mpris = this->mpris(); + if (not mpris.isEmpty()) { + QDBusReply<QDBusVariant> Metadata = QDBusConnection::sessionBus().call( + QDBusMessage::createMethodCall(mpris, "/org/mpris/MediaPlayer2", "org.freedesktop.DBus.Properties", "Get") + << "org.mpris.MediaPlayer2.Player" << "Metadata"); + if (Metadata.isValid()) { + setMprisMetadata(Metadata.value().variant().value<QDBusArgument>()); + } + else { + logger()->error() << Metadata.error().message(); + setMprisMetadata(QVariantMap()); + } + } + } } void Manager::onActiveVoiceCallChanged() @@ -196,6 +214,18 @@ void Manager::processUnreadMessages(GroupObject *group) void Manager::onMprisPropertiesChanged(QString interface, QMap<QString,QVariant> changed, QStringList invalidated) { qDebug() << interface << changed << invalidated; + + if (changed.contains("Metadata")) { + setMprisMetadata(changed.value("Metadata").value<QDBusArgument>()); + } + + if (changed.contains("PlaybackStatus")) { + QString PlaybackStatus = changed.value("PlaybackStatus").toString(); + if (PlaybackStatus == "Stopped") { + setMprisMetadata(QVariantMap()); + } + } + lastSeenMpris = message().service(); } @@ -211,3 +241,17 @@ QString Manager::mpris() return QString(); } + +void Manager::setMprisMetadata(QDBusArgument metadata) +{ + if (metadata.currentType() == QDBusArgument::MapType) { + metadata >> mprisMetadata; + emit mprisMetadataChanged(mprisMetadata); + } +} + +void Manager::setMprisMetadata(QVariantMap metadata) +{ + mprisMetadata = metadata; + emit mprisMetadataChanged(mprisMetadata); +} |
