summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/libalpm/alpm.h3
-rw-r--r--lib/libalpm/dload.c27
-rw-r--r--src/pacman/callback.c67
-rw-r--r--src/pacman/callback.h3
4 files changed, 28 insertions, 72 deletions
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);