From 82fb7a02021f94760fe53da8e09890b19005d129 Mon Sep 17 00:00:00 2001 From: Dave Reisner Date: Thu, 17 Mar 2011 09:01:30 -0400 Subject: lib/dload.c: Fix progress callback issues on download Use a static variable to effectively track the initialization state of the progress callback via the last byte amount reported as downloaded by libcurl. Signed-off-by: Dave Reisner Signed-off-by: Dan McGee --- lib/libalpm/dload.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'lib/libalpm/dload.c') diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index 8be69e8a..3598e516 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -42,9 +42,12 @@ #include "util.h" #include "handle.h" -static int prevprogress; /* last download amount */ +#ifdef HAVE_LIBCURL +static double prevprogress; /* last download amount */ +#endif -static char *get_filename(const char *url) { +static char *get_filename(const char *url) +{ char *filename = strrchr(url, '/'); if(filename != NULL) { filename++; @@ -96,6 +99,14 @@ static int curl_progress(void *filename, double dltotal, double dlnow, return 0; } + /* initialize the progress bar here to avoid displaying it when + * a repo is up to date and nothing gets downloaded */ + if(DOUBLE_EQ(prevprogress, 0)) { + if(handle->dlcb) { + handle->dlcb((const char*)filename, 0, (long)dltotal); + } + } + if(dload_interrupted) { return 1; } @@ -214,9 +225,8 @@ static int curl_download_internal(const char *url, const char *localpath, sigaction(SIGINT, NULL, &sig_int[OLD]); sigaction(SIGINT, &sig_int[NEW], NULL); - /* set initial value of prevprogress to -1 which causes curl_progress() to - * initialize the progress bar with 0% once. */ - prevprogress = -1; + /* Progress 0 - initialize */ + prevprogress = 0; /* perform transfer */ handle->curlerr = curl_easy_perform(handle->curl); -- cgit v1.2.3-24-g4f1b