index : pacman | |
Archlinux32 fork of pacman | gitolite user |
summaryrefslogtreecommitdiff |
author | Dan McGee <dan@archlinux.org> | 2008-01-22 23:11:31 -0600 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2008-02-27 18:58:24 -0600 |
commit | c2dbbd60bc8a4c90ec32fdbe9098ffae222d00d7 (patch) | |
tree | c7d3cf6624b9408b40227cb306a35f07411dece6 | |
parent | 4fe7eb66eb62ad8537801d8581e472ec594f19f3 (diff) |
-rw-r--r-- | lib/libalpm/alpm.h | 3 | ||||
-rw-r--r-- | lib/libalpm/dload.c | 27 | ||||
-rw-r--r-- | src/pacman/callback.c | 67 | ||||
-rw-r--r-- | src/pacman/callback.h | 3 |
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h index d605004f..2f9eae77 100644 --- a/lib/libalpm/alpm.h +++ b/lib/libalpm/alpm.h @@ -78,8 +78,7 @@ int alpm_logaction(char *fmt, ...); * Downloading */ -typedef void (*alpm_cb_download)(const char *filename, int file_xfered, - int file_total, int list_xfered, int list_total); +typedef void (*alpm_cb_download)(const char *filename, int xfered, int total); /* * Options diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index 85b5d726..f0c1ca90 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -70,8 +70,7 @@ static struct url *url_for_file(const char *url, const char *filename) /* TODO temporary private declaration */ int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath, - alpm_list_t *files, time_t mtime1, time_t *mtime2, int *dl_total, - unsigned long totalsize); + alpm_list_t *files, time_t mtime1, time_t *mtime2); /* TODO implement these as real functions */ @@ -86,7 +85,7 @@ int _alpm_download_single_file(const char *filename, files = alpm_list_add(files, (char*)filename); ret = _alpm_downloadfiles_forreal(servers, localpath, - files, mtimeold, mtimenew, NULL, 0); + files, mtimeold, mtimenew); /* free list (data was NOT duplicated) */ alpm_list_free(files); @@ -99,7 +98,7 @@ int _alpm_download_files(alpm_list_t *files, int ret; ret = _alpm_downloadfiles_forreal(servers, localpath, - files, 0, NULL, NULL, 0); + files, 0, NULL); return(ret); } @@ -112,19 +111,13 @@ int _alpm_download_files(alpm_list_t *files, * than mtime1. * - if *mtime2 is non-NULL, it will be filled with the mtime of the remote * file. - * - if *dl_total is non-NULL, then it will be used as the starting - * download amount when TotalDownload is set. It will also be - * set to the final download amount for the calling function to use. - * - totalsize is the total download size for use when TotalDownload - * is set. Use 0 if the total download size is not known. * * RETURN: 0 for successful download * 1 if the mtimes are identical * -1 on error */ int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath, - alpm_list_t *files, time_t mtime1, time_t *mtime2, int *dl_total, - unsigned long totalsize) + alpm_list_t *files, time_t mtime1, time_t *mtime2) { int dl_thisfile = 0; alpm_list_t *lp; @@ -177,9 +170,6 @@ int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath, _alpm_log(PM_LOG_DEBUG, "existing file found, using it\n"); fileurl->offset = (off_t)st.st_size; dl_thisfile = st.st_size; - if (dl_total != NULL) { - *dl_total += st.st_size; - } localf = fopen(output, "a"); chk_resume = 1; } else { @@ -256,8 +246,7 @@ int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath, /* Progress 0 - initialize */ if(handle->dlcb) { - handle->dlcb(pkgname, 0, ust.size, dl_total ? *dl_total : 0, - totalsize); + handle->dlcb(pkgname, 0, ust.size); } int nread = 0; @@ -289,13 +278,9 @@ int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath, } dl_thisfile += nread; - if (dl_total != NULL) { - *dl_total += nread; - } if(handle->dlcb) { - handle->dlcb(pkgname, dl_thisfile, ust.size, - dl_total ? *dl_total : 0, totalsize); + handle->dlcb(pkgname, dl_thisfile, ust.size); } } diff --git a/src/pacman/callback.c b/src/pacman/callback.c index ef161855..47b538e5 100644 --- a/src/pacman/callback.c +++ b/src/pacman/callback.c @@ -83,17 +83,14 @@ static float get_update_timediff(int first_call) } /* refactored from cb_trans_progress */ -static void fill_progress(const int graph_percent, const int display_percent, - const int proglen) +static void fill_progress(const int percent, const int proglen) { const unsigned int hashlen = proglen - 8; - const unsigned int hash = graph_percent * hashlen / 100; + const unsigned int hash = percent * hashlen / 100; static unsigned int lasthash = 0, mouth = 0; unsigned int i; - /* printf("\ndebug: proglen: %i\n", proglen); DEBUG*/ - - if(graph_percent == 0) { + if(percent == 0) { lasthash = 0; mouth = 0; } @@ -138,10 +135,10 @@ static void fill_progress(const int graph_percent, const int display_percent, } /* print percent after progress bar */ if(proglen > 5) { - printf(" %3d%%", display_percent); + printf(" %3d%%", percent); } - if(graph_percent == 100) { + if(percent == 100) { printf("\n"); } else { printf("\r"); @@ -388,7 +385,7 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent, free(wcstr); /* call refactored fill progress function */ - fill_progress(percent, percent, getcols() - infolen); + fill_progress(percent, getcols() - infolen); if(percent == 100) { alpm_list_t *i = NULL; @@ -404,8 +401,7 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent, } /* callback to handle display of download progress */ -void cb_dl_progress(const char *filename, int file_xfered, int file_total, - int list_xfered, int list_total) +void cb_dl_progress(const char *filename, int xfered, int total) { const int infolen = 50; const int filenamelen = infolen - 27; @@ -416,43 +412,22 @@ void cb_dl_progress(const char *filename, int file_xfered, int file_total, float rate = 0.0, timediff = 0.0, f_xfered = 0.0; unsigned int eta_h = 0, eta_m = 0, eta_s = 0; - int graph_percent = 0, display_percent = 0; + int percent; char rate_size = 'K', xfered_size = 'K'; - int xfered = 0, total = 0; - - /* Need this variable when TotalDownload is set to know if we should - * reset xfered_last and rate_last. */ - static int has_init = 0; if(config->noprogressbar) { return; } - /* Choose how to display the amount downloaded, rate, ETA, and - * percentage depending on the TotalDownload option. */ - if (config->totaldownload && list_total > 0) { - xfered = list_xfered; - total = list_total; - } else { - xfered = file_xfered; - total = file_total; - } - /* this is basically a switch on file_xferred: 0, file_total, and * anything else */ - if(file_xfered == 0) { - /* set default starting values, but only once for TotalDownload */ - if (!(config->totaldownload && list_total > 0) || - (config->totaldownload && list_total > 0 && !has_init)) { - gettimeofday(&initial_time, NULL); - timediff = get_update_timediff(1); - xfered_last = 0; - rate_last = 0.0; - has_init = 1; - } - rate = 0.0; - eta_s = 0; - } else if(file_xfered == file_total) { + if(xfered == 0) { + /* set default starting values */ + gettimeofday(&initial_time, NULL); + xfered_last = 0; + rate_last = 0.0; + timediff = get_update_timediff(1); + } else if(xfered == total) { /* compute final values */ struct timeval current_time; float diff_sec, diff_usec; @@ -461,7 +436,7 @@ void cb_dl_progress(const char *filename, int file_xfered, int file_total, diff_sec = current_time.tv_sec - initial_time.tv_sec; diff_usec = current_time.tv_usec - initial_time.tv_usec; timediff = diff_sec + (diff_usec / 1000000.0); - rate = xfered / (timediff * 1024.0); + rate = total / (timediff * 1024.0); /* round elapsed time to the nearest second */ eta_s = (int)(timediff + 0.5); @@ -475,12 +450,14 @@ void cb_dl_progress(const char *filename, int file_xfered, int file_total, } rate = (xfered - xfered_last) / (timediff * 1024.0); /* average rate to reduce jumpiness */ - rate = (rate + 2*rate_last) / 3; + rate = (rate + 2 * rate_last) / 3; eta_s = (total - xfered) / (rate * 1024.0); rate_last = rate; xfered_last = xfered; } + percent = (int)((float)xfered) / ((float)total) * 100; + /* fix up time for display */ eta_h = eta_s / 3600; eta_s -= eta_h * 3600; @@ -552,11 +529,7 @@ void cb_dl_progress(const char *filename, int file_xfered, int file_total, free(fname); free(wcfname); - /* The progress bar is based on the file percent regardless of the - * TotalDownload option. */ - graph_percent = (int)((float)file_xfered) / ((float)file_total) * 100; - display_percent = (int)((float)xfered) / ((float)total) * 100; - fill_progress(graph_percent, display_percent, getcols() - infolen); + fill_progress(percent, getcols() - infolen); return; } diff --git a/src/pacman/callback.h b/src/pacman/callback.h index aa8d9370..39d59d8b 100644 --- a/src/pacman/callback.h +++ b/src/pacman/callback.h @@ -33,8 +33,7 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent, int howmany, int remain); /* callback to handle display of download progress */ -void cb_dl_progress(const char *filename, int file_xfered, int file_total, - int list_xfered, int list_total); +void cb_dl_progress(const char *filename, int file_xfered, int file_total); /* callback to handle messages/notifications from pacman library */ void cb_log(pmloglevel_t level, char *fmt, va_list args); |