# HG changeset patch # User rubidium # Date 2011-03-06 10:11:59 # Node ID de3de14c6d3568346c153fdecf8f4d400c9d528f # Parent 173f9abb35c44a5bf8006022d7a3b991f0e8930d (svn r22208) -Fix [FS#4543]: When downloading a file via HTTP failed mid-way and OpenTTD fell back to the old system the partial downloaded amount would be counted twice diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -453,7 +453,7 @@ DEF_CONTENT_RECEIVE_COMMAND(Client, PACK return false; } - this->OnDownloadProgress(this->curInfo, (uint)toRead); + this->OnDownloadProgress(this->curInfo, (int)toRead); if (toRead == 0) this->AfterDownload(); } @@ -526,6 +526,10 @@ void ClientNetworkContentSocketHandler:: this->http_response_index = -2; if (this->curFile != NULL) { + /* 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); + fclose(this->curFile); this->curFile = NULL; } @@ -559,7 +563,7 @@ void ClientNetworkContentSocketHandler:: this->OnFailure(); } else { /* Just received the data. */ - this->OnDownloadProgress(this->curInfo, (uint)length); + this->OnDownloadProgress(this->curInfo, (int)length); } /* Nothing more to do now. */ return; @@ -1023,7 +1027,7 @@ void ClientNetworkContentSocketHandler:: } } -void ClientNetworkContentSocketHandler::OnDownloadProgress(const ContentInfo *ci, uint bytes) +void ClientNetworkContentSocketHandler::OnDownloadProgress(const ContentInfo *ci, int bytes) { for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); /* nothing */) { ContentCallback *cb = *iter; diff --git a/src/network/network_content.h b/src/network/network_content.h --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -49,7 +49,7 @@ struct ContentCallback { * @param ci the content info of the file * @param bytes the number of bytes downloaded since the previous call */ - virtual void OnDownloadProgress(const ContentInfo *ci, uint bytes) {} + virtual void OnDownloadProgress(const ContentInfo *ci, int bytes) {} /** * We have finished downloading a file @@ -89,7 +89,7 @@ protected: void OnConnect(bool success); void OnDisconnect(); void OnReceiveContentInfo(const ContentInfo *ci); - void OnDownloadProgress(const ContentInfo *ci, uint bytes); + void OnDownloadProgress(const ContentInfo *ci, int bytes); void OnDownloadComplete(ContentID cid); void OnFailure(); diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -175,7 +175,7 @@ public: } } - virtual void OnDownloadProgress(const ContentInfo *ci, uint bytes) + virtual void OnDownloadProgress(const ContentInfo *ci, int bytes) { if (ci->id != this->cur_id) { strecpy(this->name, ci->filename, lastof(this->name));