added source browsing

master
Boernsman 2020-01-14 22:28:00 +01:00
parent dbaecd9c1b
commit fe916126f6
3 changed files with 35 additions and 89 deletions

View File

@ -266,6 +266,7 @@ void DevicePluginBose::executeBrowserItem(BrowserActionInfo *info)
if (device->deviceClassId() == soundtouchDeviceClassId) {
SoundTouch *soundTouch = m_soundTouch.value(device);
ContentItemObject contentItem;
contentItem.source = info->browserAction().itemId();
QUuid requestId = soundTouch->setSource(contentItem);
m_asyncExecuteBroweItems.insert(requestId, info);
connect(info, &BrowserActionInfo::aborted, this, [this, requestId]{m_asyncExecuteBroweItems.remove(requestId);});

View File

@ -233,15 +233,7 @@ QUuid SoundTouch::setKey(KEY_VALUE keyValue)
QNetworkReply *reply = m_networkAccessManager->post(QNetworkRequest(url), content);
connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] {
reply->deleteLater();
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
// Check HTTP status code
if (status != 200 || reply->error() != QNetworkReply::NoError) {
qCWarning(dcBose()) << "Request error:" << reply->errorString() << "request:" << reply->url().path();
emit requestExecuted(requestId, false);
return;
}
//TODO parse error
emitRequestStatus(requestId, reply);
});
if (keyValue == KEY_VALUE_POWER) {
@ -281,15 +273,7 @@ QUuid SoundTouch::setVolume(int volume)
QNetworkReply *reply = m_networkAccessManager->post(QNetworkRequest(url), content);
connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] {
reply->deleteLater();
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
// Check HTTP status code
if (status != 200 || reply->error() != QNetworkReply::NoError) {
qCWarning(dcBose()) << "Request error:" << reply->errorString() << "request:" << reply->url().path();
emit requestExecuted(requestId, false);
return;
}
//TODO parse error
emitRequestStatus(requestId, reply);
});
return requestId;
}
@ -315,15 +299,7 @@ QUuid SoundTouch::setSource(ContentItemObject contentItem)
QNetworkReply *reply = m_networkAccessManager->post(QNetworkRequest(url), content);
connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] {
reply->deleteLater();
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
// Check HTTP status code
if (status != 200 || reply->error() != QNetworkReply::NoError) {
qCWarning(dcBose()) << "Request error:" << reply->errorString() << "request:" << reply->url().path();
emit requestExecuted(requestId, false);
return;
}
//TODO parse error
emitRequestStatus(requestId, reply);
});
return requestId;
}
@ -351,15 +327,7 @@ QUuid SoundTouch::setZone(ZoneObject zone)
QNetworkReply *reply = m_networkAccessManager->post(QNetworkRequest(url), content);
connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] {
reply->deleteLater();
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
// Check HTTP status code
if (status != 200 || reply->error() != QNetworkReply::NoError) {
qCWarning(dcBose()) << "Request error:" << reply->errorString() << "request:" << reply->url().path();
emit requestExecuted(requestId, false);
return;
}
//TODO parse error
emitRequestStatus(requestId, reply);
});
return requestId;
}
@ -385,18 +353,9 @@ QUuid SoundTouch::addZoneSlave(ZoneObject zone)
xml.writeEndDocument();
qDebug(dcBose) << "Sending request" << url << content;
QNetworkReply *reply = m_networkAccessManager->post(QNetworkRequest(url), content);
connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] {
reply->deleteLater();
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
// Check HTTP status code
if (status != 200 || reply->error() != QNetworkReply::NoError) {
qCWarning(dcBose()) << "Request error:" << reply->errorString() << "request:" << reply->url().path();
emit requestExecuted(requestId, false);
return;
}
//TODO parse error
emitRequestStatus(requestId, reply);
});
return requestId;
}
@ -424,15 +383,7 @@ QUuid SoundTouch::removeZoneSlave(ZoneObject zone)
QNetworkReply *reply = m_networkAccessManager->post(QNetworkRequest(url), content);
connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] {
reply->deleteLater();
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
// Check HTTP status code
if (status != 200 || reply->error() != QNetworkReply::NoError) {
qCWarning(dcBose()) << "Request error:" << reply->errorString() << "request:" << reply->url().path();
emit requestExecuted(requestId, false);
return;
}
//TODO parse error
emitRequestStatus(requestId, reply);
});
return requestId;
}
@ -453,15 +404,7 @@ QUuid SoundTouch::setBass(int volume)
QNetworkReply *reply = m_networkAccessManager->post(QNetworkRequest(url), content);
connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] {
reply->deleteLater();
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
// Check HTTP status code
if (status != 200 || reply->error() != QNetworkReply::NoError) {
qCWarning(dcBose()) << "Request error:" << reply->errorString() << "request:" << reply->url().path();
emit requestExecuted(requestId, false);
return;
}
//TODO parse error
emitRequestStatus(requestId, reply);
});
return requestId;
}
@ -482,15 +425,7 @@ QUuid SoundTouch::setName(QString name)
QNetworkReply *reply = m_networkAccessManager->post(QNetworkRequest(url), content);
connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] {
reply->deleteLater();
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
// Check HTTP status code
if (status != 200 || reply->error() != QNetworkReply::NoError) {
qCWarning(dcBose()) << "Request error:" << reply->errorString() << "request:" << reply->url().path();
emit requestExecuted(requestId, false);
return;
}
//TODO parse error
emitRequestStatus(requestId, reply);
});
return requestId;
}
@ -518,7 +453,8 @@ QUuid SoundTouch::setSpeaker(PlayInfoObject playInfo)
qDebug(dcBose) << "Sending request" << url << content;
QNetworkReply *reply = m_networkAccessManager->post(QNetworkRequest(url), content);
connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] {
reply->deleteLater();
emitRequestStatus(requestId, reply);
});
return requestId;
}
@ -542,19 +478,10 @@ void SoundTouch::onWebsocketDisconnected()
});
}
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;
//TODO as soon as QWebSocket supports sub-protocols
}
QUuid SoundTouch::sendGetRequest(QString path)
@ -579,9 +506,14 @@ QUuid SoundTouch::sendGetRequest(QString path)
} else {
sendGetRequest(m_getRequestQueue.takeFirst());
}
if (reply->error() != QNetworkReply::NoError) {
emit requestExecuted(requestId, false);
emit connectionChanged(false);
return;
}
emit connectionChanged(true);
// Check HTTP status code
if (status != 200 || reply->error() != QNetworkReply::NoError) {
if (status != 200) {
qCWarning(dcBose()) << "Request error:" << reply->errorString() << "request:" << reply->url().path();
emit requestExecuted(requestId, false);
return;
@ -594,8 +526,22 @@ QUuid SoundTouch::sendGetRequest(QString path)
return requestId;
}
void SoundTouch::emitRequestStatus(QUuid requestId, const QByteArray &data)
void SoundTouch::emitRequestStatus(QUuid requestId, QNetworkReply *reply)
{
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
// Check HTTP status code
if (reply->error() != QNetworkReply::NoError) {
emit connectionChanged(false);
emit requestExecuted(requestId, false);
qCWarning(dcBose()) << "Request error:" << reply->errorString() << "request:" << reply->url().path();
return;
}
emit connectionChanged(true);
if (status != 200) {
emit requestExecuted(requestId, false);
return;
}
QByteArray data = reply->readAll();
QXmlStreamReader xml;
xml.addData(data);

View File

@ -80,7 +80,7 @@ private:
QString m_ipAddress;
int m_port = 8090;
QWebSocket *m_websocket = nullptr;
void emitRequestStatus(QUuid requestId, const QByteArray &data); //returns the status, -1 in case of error
void emitRequestStatus(QUuid requestId, QNetworkReply *reply); //returns the status, -1 in case of error
void parseData(QUuid requestId, const QByteArray &data);
signals:
@ -103,7 +103,6 @@ private slots:
void onWebsocketConnected();
void onWebsocketDisconnected();
void onWebsocketMessageReceived(QString message);
void onRestRequestError(QNetworkReply::NetworkError error);
};
#endif // SOUNDTOUCH_H