summaryrefslogtreecommitdiff
path: root/daemon/manager.cpp
diff options
context:
space:
mode:
authorTomasz Sterna <tomek@xiaoka.com>2014-07-14 01:14:32 +0200
committerTomasz Sterna <tomek@xiaoka.com>2014-07-14 01:14:32 +0200
commit732018dc78916b8767bd811da39e528b3061af3a (patch)
treebb088a8a9d280ae3e88311b72dcada655ee1a5eb /daemon/manager.cpp
parent09d98ef6e6d32e73a6b3c74679adc8a49b0dee7e (diff)
Implemented pushing MPRIS metadata to watch Music app
Diffstat (limited to 'daemon/manager.cpp')
-rw-r--r--daemon/manager.cpp44
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);
+}