*/
#include "mastervolume.h"
-#include <QJsonObject>
#include <QTimer>
#include <QtDebug>
+#define MASTER_CONTROL "Master Playback"
+
MasterVolume::MasterVolume(QObject* parent)
: QObject(parent)
, m_volume{50}
{
+#if 0
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&)));
+#endif
}
+#if 0
void MasterVolume::open(const QUrl& url)
{
- m_url = url;
- TryOpen();
}
+#endif
qint32 MasterVolume::getVolume() const
{
if (m_volume != volume)
{
m_volume = volume;
+#if 0
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
- });
+ arg.insert("control", MASTER_CONTROL);
+ double v = (double) volume / 100.0;
+ arg.insert("value", v);
+ m_client.call("audiomixer", "volume", arg);
+#endif
}
}
+#if 0
+
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!";
+
+ QJsonObject arg;
+ arg.insert("control", MASTER_CONTROL);
+ m_client.call("audiomixer", "volume", arg, [this](bool r, const QJsonValue& v) {
+ if (r && v.isObject()) {
+ int volume = v.toObject()["response"].toObject()["volume"].toDouble() * 100;
+ volume = qBound(0, volume, 100);
+ if (m_volume != volume)
+ {
+ m_volume = volume;
+ emit VolumeChanged();
+ }
+ }
+
+ QJsonObject arg;
+ arg.insert("event", "volume_changed");
+ m_client.call("audiomixer", "subscribe", arg);
});
}
void MasterVolume::onClientEventReceived(QString name, const QJsonValue& data)
{
qDebug() << "MasterVolume::onClientEventReceived[" << name << "]: " << data;
- if (name == "ahl-4a/volume_changed")
+ if (name == "audiomixer/volume_changed")
{
- QJsonObject arg = data.toObject();
- bool active = arg["active"].toBool();
- if (active)
+ QString ctlName = data.toObject()["control"].toString();
+
+ if (ctlName != MASTER_CONTROL)
+ return;
+
+ int volume = data.toObject()["value"].toDouble() * 100;
+ volume = qBound(0, volume, 100);
+ if (m_volume != volume)
{
- // QString role = arg["role"].toString();
- int volume = arg["volume"].toInt();
- if (m_volume != volume)
- {
- m_volume = volume;
- emit VolumeChanged();
- }
+ m_volume = volume;
+ emit VolumeChanged();
}
}
}
-void MasterVolume::TryOpen()
-{
- m_client.open(m_url);
-}
+#endif