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

View File

@ -80,7 +80,7 @@ private:
QString m_ipAddress; QString m_ipAddress;
int m_port = 8090; int m_port = 8090;
QWebSocket *m_websocket = nullptr; 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); void parseData(QUuid requestId, const QByteArray &data);
signals: signals:
@ -103,7 +103,6 @@ private slots:
void onWebsocketConnected(); void onWebsocketConnected();
void onWebsocketDisconnected(); void onWebsocketDisconnected();
void onWebsocketMessageReceived(QString message); void onWebsocketMessageReceived(QString message);
void onRestRequestError(QNetworkReply::NetworkError error);
}; };
#endif // SOUNDTOUCH_H #endif // SOUNDTOUCH_H