diff options
| author | Petr Mrázek <peterix@gmail.com> | 2016-08-14 02:33:31 +0200 | 
|---|---|---|
| committer | Petr Mrázek <peterix@gmail.com> | 2016-08-14 23:22:54 +0200 | 
| commit | 042f3ef55c0b469f438542152c4eb02b0789ea3c (patch) | |
| tree | 03e0c15b200786558babd0fe58edac88ed1bfd1e /api/logic/minecraft/forge | |
| parent | 2f0441b3c1cd9fc3bcb176d2852da8f92a6e6777 (diff) | |
| download | PrismLauncher-042f3ef55c0b469f438542152c4eb02b0789ea3c.tar.gz PrismLauncher-042f3ef55c0b469f438542152c4eb02b0789ea3c.tar.bz2 PrismLauncher-042f3ef55c0b469f438542152c4eb02b0789ea3c.zip | |
GH-352 Make OneSix instance update downloads cancellable
Diffstat (limited to 'api/logic/minecraft/forge')
| -rw-r--r-- | api/logic/minecraft/forge/ForgeXzDownload.cpp | 44 | ||||
| -rw-r--r-- | api/logic/minecraft/forge/ForgeXzDownload.h | 12 | 
2 files changed, 47 insertions, 9 deletions
| diff --git a/api/logic/minecraft/forge/ForgeXzDownload.cpp b/api/logic/minecraft/forge/ForgeXzDownload.cpp index adf96552..8b762866 100644 --- a/api/logic/minecraft/forge/ForgeXzDownload.cpp +++ b/api/logic/minecraft/forge/ForgeXzDownload.cpp @@ -35,6 +35,12 @@ ForgeXzDownload::ForgeXzDownload(QString relative_path, MetaEntryPtr entry) : Ne  void ForgeXzDownload::start()  { +	if(m_status == Job_Aborted) +	{ +		qWarning() << "Attempt to start an aborted Download:" << m_url.toString(); +		emit aborted(m_index_within_job); +		return; +	}  	m_status = Job_InProgress;  	if (!m_entry->isStale())  	{ @@ -76,9 +82,17 @@ void ForgeXzDownload::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)  void ForgeXzDownload::downloadError(QNetworkReply::NetworkError error)  { -	// error happened during download. -	// TODO: log the reason why -	m_status = Job_Failed; +	if(error == QNetworkReply::OperationCanceledError) +	{ +		qCritical() << "Aborted " << m_url.toString(); +		m_status = Job_Aborted; +	} +	else +	{ +		// error happened during download. +		qCritical() << "Failed " << m_url.toString() << " with reason " << error; +		m_status = Job_Failed; +	}  }  void ForgeXzDownload::failAndTryNextMirror() @@ -90,7 +104,7 @@ void ForgeXzDownload::failAndTryNextMirror()  void ForgeXzDownload::downloadFinished()  {  	// if the download succeeded -	if (m_status != Job_Failed) +	if (m_status != Job_Failed && m_status != Job_Aborted)  	{  		// nothing went wrong...  		m_status = Job_Finished; @@ -110,6 +124,14 @@ void ForgeXzDownload::downloadFinished()  			return;  		}  	} +	else if(m_status == Job_Aborted) +	{ +		m_pack200_xz_file.remove(); +		m_reply.reset(); +		emit failed(m_index_within_job); +		emit aborted(m_index_within_job); +		return; +	}  	// else the download failed  	else  	{ @@ -147,6 +169,7 @@ void ForgeXzDownload::downloadReadyRead()  const size_t buffer_size = 8196; +// NOTE: once this gets here, it can't be aborted anymore. we don't care.  void ForgeXzDownload::decompressAndInstall()  {  	// rewind the downloaded temp file @@ -356,3 +379,16 @@ void ForgeXzDownload::decompressAndInstall()  	m_reply.reset();  	emit succeeded(m_index_within_job);  } + +bool ForgeXzDownload::abort() +{ +	if(m_reply) +		m_reply->abort(); +	m_status = Job_Aborted; +	return true; +} + +bool ForgeXzDownload::canAbort() +{ +	return true; +} diff --git a/api/logic/minecraft/forge/ForgeXzDownload.h b/api/logic/minecraft/forge/ForgeXzDownload.h index 67524405..e51ff9e5 100644 --- a/api/logic/minecraft/forge/ForgeXzDownload.h +++ b/api/logic/minecraft/forge/ForgeXzDownload.h @@ -41,17 +41,19 @@ public:  		return ForgeXzDownloadPtr(new ForgeXzDownload(relative_path, entry));  	}  	virtual ~ForgeXzDownload(){}; +	bool canAbort() override;  protected  slots: -	virtual void downloadProgress(qint64 bytesReceived, qint64 bytesTotal); -	virtual void downloadError(QNetworkReply::NetworkError error); -	virtual void downloadFinished(); -	virtual void downloadReadyRead(); +	void downloadProgress(qint64 bytesReceived, qint64 bytesTotal) override; +	void downloadError(QNetworkReply::NetworkError error) override; +	void downloadFinished() override; +	void downloadReadyRead() override;  public  slots: -	virtual void start(); +	void start() override; +	bool abort() override;  private:  	void decompressAndInstall(); | 
