diff options
author | Loïc Collignon <loic.collignon@iot.bzh> | 2018-12-19 15:30:09 +0100 |
---|---|---|
committer | Loïc Collignon [ IoT.bzh ] <loic.collignon@iot.bzh> | 2018-12-19 15:50:33 +0000 |
commit | 3229c695fc52e22e773cef89a835915c0bb6d90b (patch) | |
tree | 7b0b4ae96bf8dcedb4fa19c6669abc3944ecfa5b /homescreen/src/mastervolume.cpp | |
parent | 4667d93a852d66a57a2d7d26957c3aab6845756e (diff) |
Bind the slider volume to the 4a active role
4a now expose an active role, which is the opened role with the higher
priority. This binds the slider to the active role.
Bug: 1313
Change-Id: I73766163fc0b8ef1e6b70e9c13e28d3642be858a
Signed-off-by: Loïc Collignon <loic.collignon@iot.bzh>
Diffstat (limited to 'homescreen/src/mastervolume.cpp')
-rw-r--r-- | homescreen/src/mastervolume.cpp | 83 |
1 files changed, 76 insertions, 7 deletions
diff --git a/homescreen/src/mastervolume.cpp b/homescreen/src/mastervolume.cpp index 9fb92a9..35b47fc 100644 --- a/homescreen/src/mastervolume.cpp +++ b/homescreen/src/mastervolume.cpp @@ -15,17 +15,86 @@ */ #include "mastervolume.h" +#include <QJsonObject> +#include <QTimer> +#include <QtDebug> -void MasterVolume::setVolume(int volume) +MasterVolume::MasterVolume(QObject* parent) + : QObject(parent) + , m_volume{50} { - int volume_delta = volume - m_volume; - m_volume = volume; - emit sliderVolumeChanged(volume_delta); + connect(&m_client, SIGNAL(connected()), this, SLOT(onClientConnected())); + connect(&m_client, SIGNAL(disconnected()), this, SLOT(onClientDisconnected())); + connect(&m_client, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onClientError(QAbstractSocket::SocketError))); + connect(&m_client, SIGNAL(eventReceived(QString, const QJsonValue&)), this, SLOT(onClientEventReceived(QString, const QJsonValue&))); +} + +void MasterVolume::open(const QUrl& url) +{ + m_url = url; + TryOpen(); +} + +qint32 MasterVolume::getVolume() const +{ + return m_volume; +} + +void MasterVolume::setVolume(qint32 volume) +{ + if (m_volume != volume) + { + m_volume = volume; + QJsonObject arg; + arg.insert("action", "volume"); + arg.insert("value", volume); + m_client.call("ahl-4a", "activerole", arg, [](bool, const QJsonValue&) { + // Nothing to do, events will update sliders + }); + } +} +void MasterVolume::onClientConnected() +{ + // Subscribe to 4a events + m_client.call("ahl-4a", "subscribe", QJsonValue(), [this](bool r, const QJsonValue&) { + if (r) qDebug() << "MasterVolume::onClientConnected - subscribed to 4a events!"; + else qCritical () << "MasterVolume::onClientConnected - Failed to subscribe to 4a events!"; + }); +} + +void MasterVolume::onClientDisconnected() +{ + qDebug() << "MasterVolume::onClientDisconnected!"; + QTimer::singleShot(1000, this, SLOT(TryOpen())); +} + +void MasterVolume::onClientError(QAbstractSocket::SocketError se) +{ + qDebug() << "MasterVolume::onClientError: " << se; +} + +void MasterVolume::onClientEventReceived(QString name, const QJsonValue& data) +{ + qDebug() << "MasterVolume::onClientEventReceived[" << name << "]: " << data; + if (name == "ahl-4a/volume_changed") + { + QJsonObject arg = data.toObject(); + bool active = arg["active"].toBool(); + if (active) + { + // QString role = arg["role"].toString(); + int volume = arg["volume"].toInt(); + if (m_volume != volume) + { + m_volume = volume; + emit VolumeChanged(); + } + } + } } -void MasterVolume::changeExternalVolume(int volume) +void MasterVolume::TryOpen() { - m_volume = volume; - emit volumeChanged(); + m_client.open(m_url); } |