diff options
Diffstat (limited to 'daemon')
| -rw-r--r-- | daemon/dbusconnector.cpp | 4 | ||||
| -rw-r--r-- | daemon/manager.cpp | 44 | ||||
| -rw-r--r-- | daemon/manager.h | 4 | ||||
| -rw-r--r-- | daemon/watchcommands.cpp | 35 | ||||
| -rw-r--r-- | daemon/watchcommands.h | 5 | ||||
| -rw-r--r-- | daemon/watchconnector.cpp | 6 |
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); |
