GH-352 Make OneSix instance update downloads cancellable
This commit is contained in:
		@@ -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;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user