X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=homescreen%2Fsrc%2Fmastervolume.cpp;h=35b47fcc9801e87386805a1c2694bfd5d64ccba7;hb=3229c695fc52e22e773cef89a835915c0bb6d90b;hp=9fb92a9de1b6084b0b67b65fbea8c327f9658807;hpb=4667d93a852d66a57a2d7d26957c3aab6845756e;p=apps%2Fhomescreen.git 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 +#include +#include -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); }