summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--daemon/dbusconnector.cpp4
-rw-r--r--daemon/manager.cpp44
-rw-r--r--daemon/manager.h4
-rw-r--r--daemon/watchcommands.cpp35
-rw-r--r--daemon/watchcommands.h5
-rw-r--r--daemon/watchconnector.cpp6
6 files changed, 83 insertions, 15 deletions
diff --git a/daemon/dbusconnector.cpp b/daemon/dbusconnector.cpp
index 5fe064b..1ee4c67 100644
--- a/daemon/dbusconnector.cpp
+++ b/daemon/dbusconnector.cpp
@@ -18,8 +18,6 @@ DBusConnector::DBusConnector(QObject *parent) :
{
QDBusConnection bus = QDBusConnection::sessionBus();
QDBusConnectionInterface *interface = bus.interface();
- connect(interface, SIGNAL(serviceRegistered(QString&)), SLOT(onServiceRegistered(QString&)));
- connect(interface, SIGNAL(serviceUnregistered(QString&)), SIGNAL(onServiceUnregistered(QString&)));
QDBusReply<QStringList> serviceNames = interface->registeredServiceNames();
if (serviceNames.isValid()) {
@@ -28,6 +26,8 @@ DBusConnector::DBusConnector(QObject *parent) :
else {
logger()->error() << serviceNames.error().message();
}
+ connect(interface, SIGNAL(serviceRegistered(QString&)), SLOT(onServiceRegistered(QString&)));
+ connect(interface, SIGNAL(serviceUnregistered(QString&)), SIGNAL(onServiceUnregistered(QString&)));
}
bool DBusConnector::findPebble()
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);
+}
diff --git a/daemon/manager.h b/daemon/manager.h
index 75fd90f..ba482bb 100644
--- a/daemon/manager.h
+++ b/daemon/manager.h
@@ -49,8 +49,10 @@ public:
Q_INVOKABLE QString findPersonByNumber(QString number);
Q_INVOKABLE void processUnreadMessages(GroupObject *group);
Q_INVOKABLE QString mpris();
+ QVariantMap mprisMetadata;
signals:
+ void mprisMetadataChanged(QVariantMap);
public slots:
void hangupAll();
@@ -64,6 +66,8 @@ protected slots:
void onConversationGroupAdded(GroupObject *group);
void onUnreadMessagesChanged();
void onMprisPropertiesChanged(QString,QMap<QString,QVariant>,QStringList);
+ void setMprisMetadata(QDBusArgument metadata);
+ void setMprisMetadata(QVariantMap metadata);
};
diff --git a/daemon/watchcommands.cpp b/daemon/watchcommands.cpp
index 40f8963..7fc84fc 100644
--- a/daemon/watchcommands.cpp
+++ b/daemon/watchcommands.cpp
@@ -4,19 +4,34 @@ using namespace watch;
WatchCommands::WatchCommands(WatchConnector *watch, QObject *parent) :
QObject(parent), watch(watch)
-{
- connect(watch, SIGNAL(messageDecoded(uint,uint,QByteArray)), SLOT(processMessage(uint,uint,QByteArray)));
-}
+{}
void WatchCommands::processMessage(uint endpoint, uint datalen, QByteArray data)
{
- if (endpoint == WatchConnector::watchPHONE_CONTROL) {
- if (data.length() >= 5) {
- if (data.at(4) == WatchConnector::callHANGUP) {
- emit hangup();
- }
- }
- } else if (endpoint == WatchConnector::watchPHONE_VERSION) {
+ logger()->debug() << __FUNCTION__ << endpoint << "/" << data.length();
+ switch (endpoint) {
+ case WatchConnector::watchPHONE_VERSION:
watch->sendPhoneVersion();
+ break;
+ case WatchConnector::watchPHONE_CONTROL:
+ if (data.length() >= 5 && data.at(4) == WatchConnector::callHANGUP) {
+ emit hangup();
+ }
+ break;
+ case WatchConnector::watchMUSIC_CONTROL:
+ logger()->debug() << "MUSIC_CONTROL" << data.toHex();
+ break;
+
+ default:
+ logger()->info() << __FUNCTION__ << "endpoint" << endpoint << "not supported yet";
}
}
+
+void WatchCommands::onMprisMetadataChanged(QVariantMap metadata)
+{
+ QString track = metadata.value("xesam:title").toString();
+ QString album = metadata.value("xesam:album").toString();
+ QString artist = metadata.value("xesam:artist").toString();
+ logger()->debug() << __FUNCTION__ << track << album << artist;
+ watch->sendMusicNowPlaying(track, album, artist);
+}
diff --git a/daemon/watchcommands.h b/daemon/watchcommands.h
index ee58cbe..6ce70bb 100644
--- a/daemon/watchcommands.h
+++ b/daemon/watchcommands.h
@@ -2,12 +2,14 @@
#define WATCHCOMMANDS_H
#include "watchconnector.h"
+#include "Logger"
#include <QObject>
class WatchCommands : public QObject
{
Q_OBJECT
+ LOG4QT_DECLARE_QCLASS_LOGGER
watch::WatchConnector *watch;
@@ -20,6 +22,9 @@ signals:
public slots:
void processMessage(uint endpoint, uint datalen, QByteArray data);
+protected slots:
+ void onMprisMetadataChanged(QVariantMap metadata);
+
};
#endif // WATCHCOMMANDS_H
diff --git a/daemon/watchconnector.cpp b/daemon/watchconnector.cpp
index 4935287..b3b982f 100644
--- a/daemon/watchconnector.cpp
+++ b/daemon/watchconnector.cpp
@@ -273,9 +273,9 @@ void WatchConnector::sendEmailNotification(QString sender, QString data, QString
void WatchConnector::sendMusicNowPlaying(QString track, QString album, QString artist)
{
QStringList tmp;
- tmp.append(track);
- tmp.append(album);
- tmp.append(artist);
+ tmp.append(track.left(30));
+ tmp.append(album.left(30));
+ tmp.append(artist.left(30));
QByteArray res = buildMessageData(leadNOW_PLAYING_DATA, tmp);