mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-04 03:53:10 +02:00
Update ResourceManager
This commit is contained in:
parent
4827d326f4
commit
7305135125
2 changed files with 39 additions and 13 deletions
|
@ -12,7 +12,6 @@
|
|||
|
||||
#include <QFile>
|
||||
#include <QNetworkRequest>
|
||||
#include <QNetworkReply>
|
||||
|
||||
#include "AssetClient.h"
|
||||
#include "AssetRequest.h"
|
||||
|
@ -31,24 +30,38 @@ ResourceRequest::ResourceRequest(QObject* parent, const QUrl& url) :
|
|||
_url(url) {
|
||||
}
|
||||
|
||||
HTTPResourceRequest::~HTTPResourceRequest() {
|
||||
if (_reply) {
|
||||
_reply->disconnect(this);
|
||||
_reply->deleteLater();
|
||||
_reply = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void HTTPResourceRequest::doSend() {
|
||||
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
|
||||
QNetworkRequest networkRequest = QNetworkRequest(_url);
|
||||
networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT);
|
||||
|
||||
if (!_cacheEnabled) {
|
||||
if (_cacheEnabled) {
|
||||
networkRequest.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
|
||||
} else {
|
||||
networkRequest.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork);
|
||||
}
|
||||
}
|
||||
|
||||
QNetworkReply* reply = networkAccessManager.get(networkRequest);
|
||||
QObject::connect(reply, &QNetworkReply::finished, [=]() {
|
||||
if (_state != IN_PROGRESS) return;
|
||||
_reply = networkAccessManager.get(networkRequest);
|
||||
QObject::connect(_reply, &QNetworkReply::finished, [=]() {
|
||||
Q_ASSERT(_state == IN_PROGRESS);
|
||||
Q_ASSERT(_reply);
|
||||
|
||||
_state = FINISHED;
|
||||
auto error = reply->error();
|
||||
auto error = _reply->error();
|
||||
qDebug() << "Loaded " << _url;
|
||||
QString u = _url.path();
|
||||
if (error == QNetworkReply::NoError) {
|
||||
_data = reply->readAll();
|
||||
_data = _reply->readAll();
|
||||
qDebug() << "!!!! " << _data.size() << " " << _url.path();
|
||||
_loadedFromCache = _reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool();
|
||||
_result = ResourceRequest::SUCCESS;
|
||||
emit finished();
|
||||
} else if (error == QNetworkReply::TimeoutError) {
|
||||
|
@ -58,7 +71,8 @@ void HTTPResourceRequest::doSend() {
|
|||
_result = ResourceRequest::ERROR;
|
||||
emit finished();
|
||||
}
|
||||
reply->deleteLater();
|
||||
_reply->deleteLater();
|
||||
_reply = nullptr;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -105,16 +119,20 @@ void ATPResourceRequest::doSend() {
|
|||
|
||||
const int TIMEOUT_MS = 2000;
|
||||
void ResourceRequest::send() {
|
||||
Q_ASSERT(_state == UNSENT);
|
||||
|
||||
_state = IN_PROGRESS;
|
||||
doSend();
|
||||
connect(&_sendTimer, &QTimer::timeout, this, &ResourceRequest::timeout);
|
||||
_sendTimer.setSingleShot(true);
|
||||
_sendTimer.start(TIMEOUT_MS);
|
||||
_state = IN_PROGRESS;
|
||||
doSend();
|
||||
}
|
||||
|
||||
void ResourceRequest::timeout() {
|
||||
Q_ASSERT(_state != UNSENT);
|
||||
|
||||
// TIMEOUT!!
|
||||
if (_state == UNSENT) {
|
||||
if (_state == IN_PROGRESS) {
|
||||
qDebug() << "TImed out loading " << _url;
|
||||
_state = FINISHED;
|
||||
_result = TIMEOUT;
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <functional>
|
||||
|
||||
#include <QObject>
|
||||
#include <QNetworkReply>
|
||||
#include <QTimer>
|
||||
#include <QUrl>
|
||||
|
||||
|
@ -41,6 +42,7 @@ public:
|
|||
State getState() const { return _state; }
|
||||
Result getResult() const { return _result; }
|
||||
QUrl getUrl() const { return _url; }
|
||||
bool loadedFromCache() const { return _loadedFromCache; }
|
||||
|
||||
void setCacheEnabled(bool value) { _cacheEnabled = value; }
|
||||
|
||||
|
@ -52,11 +54,12 @@ protected:
|
|||
virtual void doSend() = 0;
|
||||
|
||||
QUrl _url;
|
||||
State _state = UNSENT;
|
||||
State _state { UNSENT };
|
||||
Result _result;
|
||||
QTimer _sendTimer;
|
||||
QByteArray _data;
|
||||
bool _cacheEnabled { true };
|
||||
bool _loadedFromCache { false };
|
||||
|
||||
private slots:
|
||||
void timeout();
|
||||
|
@ -65,10 +68,15 @@ private slots:
|
|||
class HTTPResourceRequest : public ResourceRequest {
|
||||
Q_OBJECT
|
||||
public:
|
||||
~HTTPResourceRequest();
|
||||
|
||||
HTTPResourceRequest(QObject* parent, const QUrl& url) : ResourceRequest(parent, url) { }
|
||||
|
||||
protected:
|
||||
virtual void doSend() override;
|
||||
|
||||
private:
|
||||
QNetworkReply* _reply { nullptr };
|
||||
};
|
||||
|
||||
class FileResourceRequest : public ResourceRequest {
|
||||
|
|
Loading…
Reference in a new issue