From 6e0e7bb33359412e96346cc5874ac7b8cc42a67d Mon Sep 17 00:00:00 2001 From: aurhat Date: Sun, 5 Oct 2014 13:50:35 +0200 Subject: [PATCH] Optimize and fix autodownload feature The commit: 1. fixes value of download speed in KB; 2. introduces unique names of progress_callback() functions; 3. removes one unnecessary write_callback() function; 4. removes duplicated code/info in loadmodel(). --- source/src/client.cpp | 8 ++++---- source/src/rendermodel.cpp | 7 +------ source/src/serverbrowser.cpp | 10 +++------- source/src/worldio.cpp | 2 +- 4 files changed, 9 insertions(+), 18 deletions(-) diff --git a/source/src/client.cpp b/source/src/client.cpp index bdde4a02..d331c720 100644 --- a/source/src/client.cpp +++ b/source/src/client.cpp @@ -996,16 +996,16 @@ void sortpckservers() } COMMAND(sortpckservers, ""); -static size_t write_callback(void *ptr, size_t size, size_t nmemb, FILE *stream) +size_t write_callback(void *ptr, size_t size, size_t nmemb, FILE *stream) { return fwrite(ptr, size, nmemb, stream); } -static int progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow) +int progress_callback_dlpackage(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow) { package *pck = (package *)clientp; loadingscreen(_("downloading package %d out of %d...\n%s %.0f/%.0f KB (%.1f%%)\n(ESC to cancel)"), pck->number + 1, pck->number + pendingpackages.numelems, - pck->name, dlnow/double(1000.0), dltotal/double(1000.0), dltotal == 0 ? 0 : (dlnow/dltotal * double(100.0))); + pck->name, dlnow/double(1024.0), dltotal/double(1024.0), dltotal == 0 ? 0 : (dlnow/dltotal * double(100.0))); if(interceptkey(SDLK_ESCAPE)) { canceldownloads = true; @@ -1078,7 +1078,7 @@ double dlpackage(package *pck) curl_easy_setopt(pck->curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(pck->curl, CURLOPT_WRITEDATA, outfile); curl_easy_setopt(pck->curl, CURLOPT_NOPROGRESS, 0); - curl_easy_setopt(pck->curl, CURLOPT_PROGRESSFUNCTION, progress_callback); + curl_easy_setopt(pck->curl, CURLOPT_PROGRESSFUNCTION, progress_callback_dlpackage); curl_easy_setopt(pck->curl, CURLOPT_PROGRESSDATA, pck); curl_easy_setopt(pck->curl, CURLOPT_CONNECTTIMEOUT, 10); // generous timeout for Bukz ;) result = curl_easy_perform(pck->curl); diff --git a/source/src/rendermodel.cpp b/source/src/rendermodel.cpp index 53265f7c..dc9697b5 100644 --- a/source/src/rendermodel.cpp +++ b/source/src/rendermodel.cpp @@ -142,11 +142,6 @@ model *loadmodel(const char *name, int i, bool trydl) defformatstring(dl)("packages/models/%s", name); requirepackage(PCK_MAPMODEL, dl); } - else - { - mdllookup.access(newstring(name), nomodel); - conoutf("\f3failed to load model %s", name); - } } } popscontext(); @@ -154,7 +149,7 @@ model *loadmodel(const char *name, int i, bool trydl) { if(!trydl) { - conoutf(_("failed to load model %s"), name); + conoutf("\f3failed to load model %s", name); if(!nomodel) nomodel = new md2("nomodel"); m = nomodel; mdllookup.access(newstring(name), m); diff --git a/source/src/serverbrowser.cpp b/source/src/serverbrowser.cpp index 20e2cf09..1132b100 100644 --- a/source/src/serverbrowser.cpp +++ b/source/src/serverbrowser.cpp @@ -1301,6 +1301,7 @@ void clearservers() } #define RETRIEVELIMIT 5000 +extern size_t write_callback(void *ptr, size_t size, size_t nmemb, FILE *stream); extern char *global_name; bool cllock = false, clfail = false; @@ -1310,7 +1311,7 @@ struct resolver_data string text; }; -static int progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow) +int progress_callback_retrieveservers(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow) { resolver_data *rd = (resolver_data *)clientp; rd->timeout = SDL_GetTicks() - rd->starttime; @@ -1323,11 +1324,6 @@ static int progress_callback(void *clientp, double dltotal, double dlnow, double return 0; } -static size_t write_callback(void *ptr, size_t size, size_t nmemb, FILE *stream) -{ - return fwrite(ptr, size, nmemb, stream); -} - void retrieveservers(vector &data) { if(mastertype == AC_MASTER_HTTP) @@ -1361,7 +1357,7 @@ void retrieveservers(vector &data) curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile); curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0); - curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback); + curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback_retrieveservers); curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, rd); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, RETRIEVELIMIT/1000); result = curl_easy_perform(curl); diff --git a/source/src/worldio.cpp b/source/src/worldio.cpp index 060f1871..d1a18d44 100644 --- a/source/src/worldio.cpp +++ b/source/src/worldio.cpp @@ -742,7 +742,7 @@ bool load_world(char *mname) // still supports all map formats that have watch.start(); int downloaded = downloadpackages(); - if(downloaded > 0) clientlogf("downloaded content (%d KB in %d seconds)", downloaded/1000, watch.stop()/1000); + if(downloaded > 0) clientlogf("downloaded content (%d KB in %d seconds)", downloaded/1024, watch.stop()/1000); c2skeepalive();