Add proper cleanup of AssetRequest in AssetResourceRequest

This commit is contained in:
Ryan Huffman 2015-09-14 11:34:51 -07:00
parent b8c1c279c6
commit e87fcb78cd
2 changed files with 20 additions and 6 deletions

View file

@ -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) {

View file

@ -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