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