summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2011-03-06 10:11:59 +0000
committerrubidium <rubidium@openttd.org>2011-03-06 10:11:59 +0000
commitdb6121f361df86c6f961938db5cce0f8a23e923d (patch)
treee3eab9084aee45c1869262f77309db21f162132e
parentbbde7766d2ce6c3fd11cc6ab9791bc5f264df6c8 (diff)
downloadopenttd-db6121f361df86c6f961938db5cce0f8a23e923d.tar.xz
(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
-rw-r--r--src/network/network_content.cpp10
-rw-r--r--src/network/network_content.h4
-rw-r--r--src/network/network_content_gui.cpp2
3 files changed, 10 insertions, 6 deletions
diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp
index 05a7a7bf5..9a1d862d1 100644
--- a/src/network/network_content.cpp
+++ b/src/network/network_content.cpp
@@ -453,7 +453,7 @@ DEF_CONTENT_RECEIVE_COMMAND(Client, PACKET_CONTENT_SERVER_CONTENT)
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::OnFailure()
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::OnReceiveData(const char *data, size_t l
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::OnReceiveContentInfo(const ContentInfo *
}
}
-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
index 779f94ea0..4239a005f 100644
--- 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
index 70cc0d8a1..ee3a325d9 100644
--- 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));