added zones and groups
parent
9d30ec249f
commit
aa25f98762
|
|
@ -63,6 +63,8 @@ Device::DeviceSetupStatus DevicePluginBose::setupDevice(Device *device)
|
|||
connect(soundTouch, &SoundTouch::sourcesReceived, this, &DevicePluginBose::onSourcesObjectReceived);
|
||||
connect(soundTouch, &SoundTouch::bassReceived, this, &DevicePluginBose::onBassObjectReceived);
|
||||
connect(soundTouch, &SoundTouch::bassCapabilitiesReceived, this, &DevicePluginBose::onBassCapabilitiesObjectReceived);
|
||||
connect(soundTouch, &SoundTouch::groupReceived, this, &DevicePluginBose::onGroupObjectReceived);
|
||||
connect(soundTouch, &SoundTouch::zoneReceived, this, &DevicePluginBose::onZoneObjectReceived);
|
||||
|
||||
soundTouch->getInfo();
|
||||
soundTouch->getNowPlaying();
|
||||
|
|
@ -220,6 +222,8 @@ void DevicePluginBose::onPluginTimer()
|
|||
soundTouch->getNowPlaying();
|
||||
soundTouch->getVolume();
|
||||
soundTouch->getBass();
|
||||
soundTouch->getGroup();
|
||||
soundTouch->getZone();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -309,3 +313,19 @@ void DevicePluginBose::onBassCapabilitiesObjectReceived(BassCapabilitiesObject b
|
|||
{
|
||||
qDebug(dcBose()) << "Bass capabilities (max, min, default):" << bassCapabilities.bassMax << bassCapabilities.bassMin << bassCapabilities.bassDefault;
|
||||
}
|
||||
|
||||
void DevicePluginBose::onGroupObjectReceived(GroupObject group)
|
||||
{
|
||||
qDebug(dcBose()) << "Group" << group.name << group.status;
|
||||
foreach (RolesObject role, group.roles) {
|
||||
qDebug(dcBose()) << "-> member:" << role.groupRole.deviceID;
|
||||
}
|
||||
}
|
||||
|
||||
void DevicePluginBose::onZoneObjectReceived(ZoneObject zone)
|
||||
{
|
||||
qDebug(dcBose()) << "Zone master" << zone.deviceID;
|
||||
foreach (MemberObject member, zone.members) {
|
||||
qDebug(dcBose()) << "-> member:" << member.deviceID;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,6 +64,8 @@ private slots:
|
|||
void onSourcesObjectReceived(SourcesObject sources);
|
||||
void onBassObjectReceived(BassObject bass);
|
||||
void onBassCapabilitiesObjectReceived(BassCapabilitiesObject bassCapabilities);
|
||||
void onGroupObjectReceived(GroupObject group);
|
||||
void onZoneObjectReceived(ZoneObject zone);
|
||||
};
|
||||
|
||||
#endif // DEVICEPLUGINBOSE_H
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
#include "soundtouch.h"
|
||||
#include "hardwaremanager.h"
|
||||
#include "soundtouch.h"
|
||||
#include "devices/device.h"
|
||||
#include "network/networkaccessmanager.h"
|
||||
|
||||
|
|
@ -54,6 +55,7 @@ void SoundTouch::getInfo()
|
|||
//qDebug(dcBose) << "Sending request" << url;
|
||||
QNetworkReply *reply = m_networkAccessManager->get(QNetworkRequest(url));
|
||||
connect(reply, &QNetworkReply::finished, this, &SoundTouch::onRestRequestFinished);
|
||||
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onRestRequestError(QNetworkReply::NetworkError)));
|
||||
}
|
||||
|
||||
void SoundTouch::getVolume()
|
||||
|
|
@ -98,8 +100,8 @@ void SoundTouch::getGroup()
|
|||
url.setHost(m_ipAddress);
|
||||
url.setScheme("http");
|
||||
url.setPort(m_port);
|
||||
url.setPath("/group");
|
||||
qDebug(dcBose) << "Sending request" << url;
|
||||
url.setPath("/getGroup");
|
||||
//qDebug(dcBose) << "Sending request" << url;
|
||||
QNetworkReply *reply = m_networkAccessManager->get(QNetworkRequest(url));
|
||||
connect(reply, &QNetworkReply::finished, this, &SoundTouch::onRestRequestFinished);
|
||||
}
|
||||
|
|
@ -135,7 +137,7 @@ void SoundTouch::getPresets()
|
|||
url.setScheme("http");
|
||||
url.setPort(m_port);
|
||||
url.setPath("/presets");
|
||||
qDebug(dcBose) << "Sending request" << url;
|
||||
//qDebug(dcBose) << "Sending request" << url;
|
||||
QNetworkReply *reply = m_networkAccessManager->get(QNetworkRequest(url));
|
||||
connect(reply, &QNetworkReply::finished, this, &SoundTouch::onRestRequestFinished);
|
||||
}
|
||||
|
|
@ -147,7 +149,7 @@ void SoundTouch::getBassCapabilities()
|
|||
url.setScheme("http");
|
||||
url.setPort(m_port);
|
||||
url.setPath("/bassCapabilities");
|
||||
qDebug(dcBose) << "Sending request" << url;
|
||||
//qDebug(dcBose) << "Sending request" << url;
|
||||
QNetworkReply *reply = m_networkAccessManager->get(QNetworkRequest(url));
|
||||
connect(reply, &QNetworkReply::finished, this, &SoundTouch::onRestRequestFinished);
|
||||
}
|
||||
|
|
@ -284,8 +286,10 @@ void SoundTouch::setZone(ZoneObject zone)
|
|||
xml.writeStartDocument();
|
||||
xml.writeStartElement("zone");
|
||||
xml.writeAttribute("master", zone.deviceID);
|
||||
xml.writeTextElement("member", zone.member.deviceID);
|
||||
xml.writeAttribute("ipaddress", zone.member.ipAddress);
|
||||
foreach (MemberObject member, zone.members){
|
||||
xml.writeTextElement("member", member.deviceID);
|
||||
xml.writeAttribute("ipaddress", member.ipAddress);
|
||||
}
|
||||
xml.writeEndElement(); //zone
|
||||
xml.writeEndDocument();
|
||||
qDebug(dcBose) << "Sending request" << url << content;
|
||||
|
|
@ -305,8 +309,10 @@ void SoundTouch::addZoneSlave(ZoneObject zone)
|
|||
xml.writeStartDocument();
|
||||
xml.writeStartElement("zone");
|
||||
xml.writeAttribute("master", zone.deviceID);
|
||||
xml.writeTextElement("member", zone.member.deviceID);
|
||||
xml.writeAttribute("ipaddress", zone.member.ipAddress);
|
||||
foreach (MemberObject member, zone.members){
|
||||
xml.writeTextElement("member", member.deviceID);
|
||||
xml.writeAttribute("ipaddress", member.ipAddress);
|
||||
}
|
||||
xml.writeEndElement(); //zone
|
||||
xml.writeEndDocument();
|
||||
qDebug(dcBose) << "Sending request" << url << content;
|
||||
|
|
@ -326,8 +332,10 @@ void SoundTouch::removeZoneSlave(ZoneObject zone)
|
|||
xml.writeStartDocument();
|
||||
xml.writeStartElement("zone");
|
||||
xml.writeAttribute("master", zone.deviceID);
|
||||
xml.writeTextElement("member", zone.member.deviceID);
|
||||
xml.writeAttribute("ipaddress", zone.member.ipAddress);
|
||||
foreach (MemberObject member, zone.members){
|
||||
xml.writeTextElement("member", member.deviceID);
|
||||
xml.writeAttribute("ipaddress", member.ipAddress);
|
||||
}
|
||||
xml.writeEndElement(); //zone
|
||||
xml.writeEndDocument();
|
||||
qDebug(dcBose) << "Sending request" << url << content;
|
||||
|
|
@ -651,7 +659,7 @@ void SoundTouch::onRestRequestFinished() {
|
|||
} else if(xml.name() == "actualbass"){
|
||||
//qDebug(dcBose) << "Actual bass" << xml.readElementText();
|
||||
bassObject.actualBass = xml.readElementText().toInt();
|
||||
}else {
|
||||
} else {
|
||||
xml.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
|
@ -659,6 +667,27 @@ void SoundTouch::onRestRequestFinished() {
|
|||
} else if (xml.name() == "bassCapabilities") {
|
||||
BassCapabilitiesObject bassCapabilities;
|
||||
|
||||
if(xml.attributes().hasAttribute("deviceID")) {
|
||||
bassCapabilities.deviceID = xml.attributes().value("deviceID").toString();
|
||||
}
|
||||
|
||||
while(xml.readNextStartElement()){
|
||||
if(xml.name() == "bassAvailable"){
|
||||
//qDebug(dcBose) << "BassAvailable" << xml.readElementText();
|
||||
bassCapabilities.bassAvailable = ( xml.readElementText().toUpper() == "TRUE" );
|
||||
} else if(xml.name() == "bassMin"){
|
||||
//qDebug(dcBose) << "bass Min" << xml.readElementText();
|
||||
bassCapabilities.bassMin = xml.readElementText().toInt();
|
||||
} else if(xml.name() == "bassMax"){
|
||||
//qDebug(dcBose) << "bass Max" << xml.readElementText();
|
||||
bassCapabilities.bassMax = xml.readElementText().toInt();
|
||||
} else if(xml.name() == "bassDefault"){
|
||||
//qDebug(dcBose) << "bass default" << xml.readElementText();
|
||||
bassCapabilities.bassDefault = xml.readElementText().toInt();
|
||||
}else {
|
||||
xml.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
emit bassCapabilitiesReceived(bassCapabilities);
|
||||
} else if (xml.name() == "presets") {
|
||||
PresetObject preset;
|
||||
|
|
@ -691,19 +720,62 @@ void SoundTouch::onRestRequestFinished() {
|
|||
} else if (xml.name() == "group") {
|
||||
GroupObject group;
|
||||
if(xml.attributes().hasAttribute("deviceID")) {
|
||||
//qDebug(dcBose) << "Device ID" << xml.attributes().value("deviceID").toString();
|
||||
group.id = xml.attributes().value("id").toString();
|
||||
}
|
||||
|
||||
emit groupReceived(group);
|
||||
} else {
|
||||
while(xml.readNextStartElement()){
|
||||
if(xml.name() == "name") {
|
||||
group.name = xml.readElementText();
|
||||
} else if(xml.name() == "masterDeviceId") {
|
||||
group.masterDeviceId = xml.readElementText();
|
||||
} else if(xml.name() == "roles") {
|
||||
//group.roles = xml.readElementText().toInt();
|
||||
} else if(xml.name() == "status"){
|
||||
QString groupStatus = xml.readElementText();
|
||||
//qDebug(dcBose) << "Group role" << groupStatus;
|
||||
//group.status = xml.readElementText();
|
||||
}else {
|
||||
xml.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
emit groupReceived(group);
|
||||
} else if (xml.name() == "zone") {
|
||||
ZoneObject zone;
|
||||
if(xml.attributes().hasAttribute("master")) {
|
||||
zone.deviceID = xml.attributes().value("master").toString();
|
||||
}
|
||||
while(xml.readNextStartElement()){
|
||||
MemberObject member;
|
||||
if(xml.name() == "member") {
|
||||
if(xml.attributes().hasAttribute("ipaddress")) {
|
||||
member.ipAddress = xml.attributes().value("ipaddress").toString();
|
||||
}
|
||||
member.deviceID = xml.readElementText();
|
||||
} else {
|
||||
xml.skipCurrentElement();
|
||||
}
|
||||
zone.members.append(member);
|
||||
}
|
||||
emit zoneReceived(zone);
|
||||
}
|
||||
else {
|
||||
xml.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SoundTouch::onRestRequestError(QNetworkReply::NetworkError error)
|
||||
{
|
||||
Q_UNUSED(error)
|
||||
|
||||
QNetworkReply *reply = static_cast<QNetworkReply *>(sender());
|
||||
reply->deleteLater();
|
||||
|
||||
qWarning(dcBose) << "Rest Error" << reply->errorString();
|
||||
}
|
||||
|
||||
|
||||
void SoundTouch::onWebsocketMessageReceived(QString message)
|
||||
{
|
||||
qDebug(dcBose) << "Websocket message received:" << message;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ private slots:
|
|||
void onWebsocketDisconnected();
|
||||
void onWebsocketMessageReceived(QString message);
|
||||
void onRestRequestFinished();
|
||||
void onRestRequestError(QNetworkReply::NetworkError error);
|
||||
};
|
||||
|
||||
#endif // SOUNDTOUCH_H
|
||||
|
|
|
|||
|
|
@ -196,7 +196,7 @@ struct MemberObject {
|
|||
|
||||
struct ZoneObject {
|
||||
QString deviceID; //Attribute. The deviceID unique identifier of the master product.
|
||||
MemberObject member; //Element. This object describes products in the zone There is an object for each product.
|
||||
QList<MemberObject> members; //Element. This object describes products in the zone There is an object for each product.
|
||||
};
|
||||
|
||||
struct BassCapabilitiesObject {
|
||||
|
|
@ -234,7 +234,7 @@ struct GroupObject {
|
|||
QString id; //Attribute. A unique ID for the group.
|
||||
QString name; //Element. A user-set name for the group.
|
||||
QString masterDeviceId; //Element. The unique identifier of the master product in the group.
|
||||
RolesObject roles; //Element. This object describes the products in the group and their location (left/right).
|
||||
QList<RolesObject> roles; //Element. This object describes the products in the group and their location (left/right).
|
||||
PLAY_STATUS status; //Element. The state of the stereo pair group.
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue