mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 06:17:28 +02:00
Add proper cleanup of AssetRequest in AssetResourceRequest
This commit is contained in:
parent
b8c1c279c6
commit
e87fcb78cd
2 changed files with 20 additions and 6 deletions
|
@ -12,9 +12,14 @@
|
||||||
#include "AssetResourceRequest.h"
|
#include "AssetResourceRequest.h"
|
||||||
|
|
||||||
#include "AssetClient.h"
|
#include "AssetClient.h"
|
||||||
#include "AssetRequest.h"
|
|
||||||
#include "AssetUtils.h"
|
#include "AssetUtils.h"
|
||||||
|
|
||||||
|
AssetResourceRequest::~AssetResourceRequest() {
|
||||||
|
if (_assetRequest) {
|
||||||
|
_assetRequest->deleteLater();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AssetResourceRequest::doSend() {
|
void AssetResourceRequest::doSend() {
|
||||||
// Make request to atp
|
// Make request to atp
|
||||||
auto assetClient = DependencyManager::get<AssetClient>();
|
auto assetClient = DependencyManager::get<AssetClient>();
|
||||||
|
@ -31,9 +36,9 @@ void AssetResourceRequest::doSend() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto request = assetClient->createRequest(hash, extension);
|
_assetRequest = assetClient->createRequest(hash, extension);
|
||||||
|
|
||||||
if (!request) {
|
if (!_assetRequest) {
|
||||||
_result = ServerUnavailable;
|
_result = ServerUnavailable;
|
||||||
_state = Finished;
|
_state = Finished;
|
||||||
|
|
||||||
|
@ -42,9 +47,10 @@ void AssetResourceRequest::doSend() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(request, &AssetRequest::progress, this, &AssetResourceRequest::progress);
|
connect(_assetRequest, &AssetRequest::progress, this, &AssetResourceRequest::progress);
|
||||||
QObject::connect(request, &AssetRequest::finished, [this](AssetRequest* req) mutable {
|
QObject::connect(_assetRequest, &AssetRequest::finished, [this](AssetRequest* req) mutable {
|
||||||
Q_ASSERT(_state == InProgress);
|
Q_ASSERT(_state == InProgress);
|
||||||
|
Q_ASSERT(req == _assetRequest);
|
||||||
Q_ASSERT(req->getState() == AssetRequest::FINISHED);
|
Q_ASSERT(req->getState() == AssetRequest::FINISHED);
|
||||||
|
|
||||||
switch (req->getError()) {
|
switch (req->getError()) {
|
||||||
|
@ -65,9 +71,12 @@ void AssetResourceRequest::doSend() {
|
||||||
|
|
||||||
_state = Finished;
|
_state = Finished;
|
||||||
emit finished();
|
emit finished();
|
||||||
|
|
||||||
|
_assetRequest->deleteLater();
|
||||||
|
_assetRequest = nullptr;
|
||||||
});
|
});
|
||||||
|
|
||||||
request->start();
|
_assetRequest->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetResourceRequest::onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) {
|
void AssetResourceRequest::onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) {
|
||||||
|
|
|
@ -14,18 +14,23 @@
|
||||||
|
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
|
|
||||||
|
#include "AssetRequest.h"
|
||||||
#include "ResourceRequest.h"
|
#include "ResourceRequest.h"
|
||||||
|
|
||||||
class AssetResourceRequest : public ResourceRequest {
|
class AssetResourceRequest : public ResourceRequest {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AssetResourceRequest(QObject* parent, const QUrl& url) : ResourceRequest(parent, url) { }
|
AssetResourceRequest(QObject* parent, const QUrl& url) : ResourceRequest(parent, url) { }
|
||||||
|
~AssetResourceRequest();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void doSend() override;
|
virtual void doSend() override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal);
|
void onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal);
|
||||||
|
|
||||||
|
private:
|
||||||
|
AssetRequest* _assetRequest;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue