Changeset - r26885:8b59e35b5c78
[Not reviewed]
master
0 2 0
Patric Stout - 19 months ago 2023-02-15 19:51:58
truebrain@openttd.org
Fix: reset content download progress to zero if falling back to TCP

Otherwise this chain of events can happen:
- You already have a (partial) file downloaded
- You start the download, and HTTP fails
- This resets the download progress to the current size of the file
- The TCP download starts at a very large value (UINT32_MAX - filesize)

It now resets to 0% done when any negative value is being given.
As added bonus, we no longer have to query how much was already
downloaded.
2 files changed with 9 insertions and 5 deletions:
0 comments (0 inline, 0 general)
src/network/network_content.cpp
Show inline comments
 
@@ -586,9 +586,7 @@ void ClientNetworkContentSocketHandler::
 
	this->http_response_index = -2;
 

	
 
	if (this->curFile != nullptr) {
 
		/* Revert the download progress when we are going for the old system. */
 
		long size = ftell(this->curFile);
 
		if (size > 0) this->OnDownloadProgress(this->curInfo, (int)-size);
 
		this->OnDownloadProgress(this->curInfo, -1);
 

	
 
		fclose(this->curFile);
 
		this->curFile = nullptr;
src/network/network_content_gui.cpp
Show inline comments
 
@@ -100,7 +100,7 @@ static WindowDesc _network_content_downl
 
);
 

	
 
BaseNetworkContentDownloadStatusWindow::BaseNetworkContentDownloadStatusWindow(WindowDesc *desc) :
 
		Window(desc), cur_id(UINT32_MAX)
 
		Window(desc), downloaded_bytes(0), downloaded_files(0), cur_id(UINT32_MAX)
 
{
 
	_network_content_client.AddCallback(this);
 
	_network_content_client.DownloadSelectedContent(this->total_files, this->total_bytes);
 
@@ -174,7 +174,13 @@ void BaseNetworkContentDownloadStatusWin
 
		this->downloaded_files++;
 
	}
 

	
 
	this->downloaded_bytes += bytes;
 
	/* A negative value means we are resetting; for example, when retrying or using a fallback. */
 
	if (bytes < 0) {
 
		this->downloaded_bytes = 0;
 
	} else {
 
		this->downloaded_bytes += bytes;
 
	}
 

	
 
	this->SetDirty();
 
}
 

	
0 comments (0 inline, 0 general)