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 "AssetClient.h"
#include "AssetRequest.h"
#include "AssetUtils.h"
AssetResourceRequest::~AssetResourceRequest() {
if (_assetRequest) {
_assetRequest->deleteLater();
}
}
void AssetResourceRequest::doSend() {
// Make request to atp
auto assetClient = DependencyManager::get<AssetClient>();
@ -31,9 +36,9 @@ void AssetResourceRequest::doSend() {
return;
}
auto request = assetClient->createRequest(hash, extension);
_assetRequest = assetClient->createRequest(hash, extension);
if (!request) {
if (!_assetRequest) {
_result = ServerUnavailable;
_state = Finished;
@ -42,9 +47,10 @@ void AssetResourceRequest::doSend() {
return;
}
connect(request, &AssetRequest::progress, this, &AssetResourceRequest::progress);
QObject::connect(request, &AssetRequest::finished, [this](AssetRequest* req) mutable {
connect(_assetRequest, &AssetRequest::progress, this, &AssetResourceRequest::progress);
QObject::connect(_assetRequest, &AssetRequest::finished, [this](AssetRequest* req) mutable {
Q_ASSERT(_state == InProgress);
Q_ASSERT(req == _assetRequest);
Q_ASSERT(req->getState() == AssetRequest::FINISHED);
switch (req->getError()) {
@ -65,9 +71,12 @@ void AssetResourceRequest::doSend() {
_state = Finished;
emit finished();
_assetRequest->deleteLater();
_assetRequest = nullptr;
});
request->start();
_assetRequest->start();
}
void AssetResourceRequest::onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) {

View file

@ -14,18 +14,23 @@
#include <QUrl>
#include "AssetRequest.h"
#include "ResourceRequest.h"
class AssetResourceRequest : public ResourceRequest {
Q_OBJECT
public:
AssetResourceRequest(QObject* parent, const QUrl& url) : ResourceRequest(parent, url) { }
~AssetResourceRequest();
protected:
virtual void doSend() override;
private slots:
void onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal);
private:
AssetRequest* _assetRequest;
};
#endif