diff --git a/bose/devicepluginbose.cpp b/bose/devicepluginbose.cpp index aa9fd92e..958959bb 100644 --- a/bose/devicepluginbose.cpp +++ b/bose/devicepluginbose.cpp @@ -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);}); diff --git a/bose/soundtouch.cpp b/bose/soundtouch.cpp index bd3b1faa..b475f543 100644 --- a/bose/soundtouch.cpp +++ b/bose/soundtouch.cpp @@ -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(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); diff --git a/bose/soundtouch.h b/bose/soundtouch.h index 94da7b90..1bf60303 100644 --- a/bose/soundtouch.h +++ b/bose/soundtouch.h @@ -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