aboutsummaryrefslogtreecommitdiff
path: root/lib/progress.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/progress.c')
-rw-r--r--lib/progress.c231
1 files changed, 117 insertions, 114 deletions
diff --git a/lib/progress.c b/lib/progress.c
index 1bb5aec0c..35847fab4 100644
--- a/lib/progress.c
+++ b/lib/progress.c
@@ -118,7 +118,7 @@ void pgrsDone(struct UrlData *data)
void pgrsMode(struct UrlData *data, int mode)
{
/* mode should include a hidden mode as well */
- if(data->conf&(CONF_NOPROGRESS|CONF_MUTE))
+ if(data->bits.hide_progress || data->bits.mute)
data->progress.flags |= PGRS_HIDE; /* don't show anything */
else {
data->progress.mode = mode; /* store type */
@@ -187,10 +187,36 @@ void pgrsSetUploadSize(struct UrlData *data, double size)
*/
-void pgrsUpdate(struct UrlData *data)
+int pgrsUpdate(struct UrlData *data)
{
struct timeval now;
+ char max5[6][6];
+ double dlpercen=0;
+ double ulpercen=0;
+ double total_percen=0;
+
+ double total_transfer;
+ double total_expected_transfer;
+
+#define CURR_TIME 5
+
+ static double speeder[ CURR_TIME ];
+ static int speeder_c=0;
+
+ int nowindex = speeder_c% CURR_TIME;
+ int checkindex;
+ int count;
+
+ char time_left[10];
+ char time_total[10];
+ char time_current[10];
+
+ double ulestimate=0;
+ double dlestimate=0;
+
+ double total_estimate;
+
if(data->progress.flags & PGRS_HIDE)
; /* We do enter this function even if we don't wanna see anything, since
this is were lots of the calculations are being made that will be used
@@ -206,133 +232,109 @@ void pgrsUpdate(struct UrlData *data)
now = tvnow(); /* what time is it */
- switch(data->progress.mode) {
- case CURL_PROGRESS_STATS:
- default:
- {
- char max5[6][6];
- double dlpercen=0;
- double ulpercen=0;
- double total_percen=0;
-
- double total_transfer;
- double total_expected_transfer;
-
-#define CURR_TIME 5
-
- static double speeder[ CURR_TIME ];
- static int speeder_c=0;
-
- int nowindex = speeder_c% CURR_TIME;
- int checkindex;
- int count;
-
- char time_left[10];
- char time_total[10];
- char time_current[10];
-
- double ulestimate=0;
- double dlestimate=0;
-
- double total_estimate;
-
- if(data->progress.lastshow == tvlong(now))
- return; /* never update this more than once a second if the end isn't
- reached */
- data->progress.lastshow = now.tv_sec;
+ if(data->progress.lastshow == tvlong(now))
+ return 0; /* never update this more than once a second if the end isn't
+ reached */
+ data->progress.lastshow = now.tv_sec;
- /* The exact time spent so far */
- data->progress.timespent = tvdiff (now, data->progress.start);
+ /* The exact time spent so far */
+ data->progress.timespent = tvdiff (now, data->progress.start);
- /* The average download speed this far */
- data->progress.dlspeed = data->progress.downloaded/(data->progress.timespent!=0.0?data->progress.timespent:1.0);
+ /* The average download speed this far */
+ data->progress.dlspeed = data->progress.downloaded/(data->progress.timespent!=0.0?data->progress.timespent:1.0);
- /* The average upload speed this far */
- data->progress.ulspeed = data->progress.uploaded/(data->progress.timespent!=0.0?data->progress.timespent:1.0);
+ /* The average upload speed this far */
+ data->progress.ulspeed = data->progress.uploaded/(data->progress.timespent!=0.0?data->progress.timespent:1.0);
- /* Let's do the "current speed" thing, which should use the fastest
+ /* Let's do the "current speed" thing, which should use the fastest
of the dl/ul speeds */
- speeder[ nowindex ] = data->progress.downloaded>data->progress.uploaded?
- data->progress.downloaded:data->progress.uploaded;
- speeder_c++; /* increase */
- count = ((speeder_c>=CURR_TIME)?CURR_TIME:speeder_c) - 1;
- checkindex = (speeder_c>=CURR_TIME)?speeder_c%CURR_TIME:0;
+ speeder[ nowindex ] = data->progress.downloaded>data->progress.uploaded?
+ data->progress.downloaded:data->progress.uploaded;
+ speeder_c++; /* increase */
+ count = ((speeder_c>=CURR_TIME)?CURR_TIME:speeder_c) - 1;
+ checkindex = (speeder_c>=CURR_TIME)?speeder_c%CURR_TIME:0;
- /* find out the average speed the last CURR_TIME seconds */
- data->progress.current_speed =
- (speeder[nowindex]-speeder[checkindex])/(count?count:1);
+ /* find out the average speed the last CURR_TIME seconds */
+ data->progress.current_speed =
+ (speeder[nowindex]-speeder[checkindex])/(count?count:1);
- if(data->progress.flags & PGRS_HIDE)
- return;
+ if(data->progress.flags & PGRS_HIDE)
+ return 0;
+ else if(data->fprogress) {
+ return data->fprogress(data->progress_client,
+ data->progress.size_dl,
+ data->progress.downloaded,
+ data->progress.size_ul,
+ data->progress.uploaded);
+ }
/* Figure out the estimated time of arrival for the upload */
- if(data->progress.flags & PGRS_UL_SIZE_KNOWN) {
- if(!data->progress.ulspeed)
- data->progress.ulspeed=1;
- ulestimate = data->progress.size_ul / data->progress.ulspeed;
- ulpercen = (data->progress.uploaded / data->progress.size_ul)*100;
- }
+ if(data->progress.flags & PGRS_UL_SIZE_KNOWN) {
+ if(!data->progress.ulspeed)
+ data->progress.ulspeed=1;
+ ulestimate = data->progress.size_ul / data->progress.ulspeed;
+ ulpercen = (data->progress.uploaded / data->progress.size_ul)*100;
+ }
- /* ... and the download */
- if(data->progress.flags & PGRS_DL_SIZE_KNOWN) {
- if(!data->progress.dlspeed)
- data->progress.dlspeed=1;
- dlestimate = data->progress.size_dl / data->progress.dlspeed;
- dlpercen = (data->progress.downloaded / data->progress.size_dl)*100;
- }
+ /* ... and the download */
+ if(data->progress.flags & PGRS_DL_SIZE_KNOWN) {
+ if(!data->progress.dlspeed)
+ data->progress.dlspeed=1;
+ dlestimate = data->progress.size_dl / data->progress.dlspeed;
+ dlpercen = (data->progress.downloaded / data->progress.size_dl)*100;
+ }
- /* Now figure out which of them that is slower and use for the for
+ /* Now figure out which of them that is slower and use for the for
total estimate! */
- total_estimate = ulestimate>dlestimate?ulestimate:dlestimate;
+ total_estimate = ulestimate>dlestimate?ulestimate:dlestimate;
- /* If we have a total estimate, we can display that and the expected
+ /* If we have a total estimate, we can display that and the expected
time left */
- if(total_estimate) {
- time2str(time_left, total_estimate-(int) data->progress.timespent);
- time2str(time_total, total_estimate);
- }
- else {
- /* otherwise we blank those times */
- strcpy(time_left, "--:--:--");
- strcpy(time_total, "--:--:--");
- }
- /* The time spent so far is always known */
- time2str(time_current, data->progress.timespent);
-
- /* Get the total amount of data expected to get transfered */
- total_expected_transfer =
- (data->progress.flags & PGRS_UL_SIZE_KNOWN?
- data->progress.size_ul:data->progress.uploaded)+
- (data->progress.flags & PGRS_DL_SIZE_KNOWN?
- data->progress.size_dl:data->progress.downloaded);
+ if(total_estimate) {
+ time2str(time_left, total_estimate-(int) data->progress.timespent);
+ time2str(time_total, total_estimate);
+ }
+ else {
+ /* otherwise we blank those times */
+ strcpy(time_left, "--:--:--");
+ strcpy(time_total, "--:--:--");
+ }
+ /* The time spent so far is always known */
+ time2str(time_current, data->progress.timespent);
+
+ /* Get the total amount of data expected to get transfered */
+ total_expected_transfer =
+ (data->progress.flags & PGRS_UL_SIZE_KNOWN?
+ data->progress.size_ul:data->progress.uploaded)+
+ (data->progress.flags & PGRS_DL_SIZE_KNOWN?
+ data->progress.size_dl:data->progress.downloaded);
- /* We have transfered this much so far */
- total_transfer = data->progress.downloaded + data->progress.uploaded;
-
- /* Get the percentage of data transfered so far */
- if(total_expected_transfer)
- total_percen=(double)(total_transfer/total_expected_transfer)*100;
-
-
- fprintf(stderr,
- "\r%3d %s %3d %s %3d %s %s %s %s %s %s %s",
- (int)total_percen, /* total % */
- max5data(total_expected_transfer, max5[2]), /* total size */
- (int)dlpercen, /* rcvd % */
- max5data(data->progress.downloaded, max5[0]), /* rcvd size */
- (int)ulpercen, /* xfer % */
- max5data(data->progress.uploaded, max5[1]), /* xfer size */
-
- max5data(data->progress.dlspeed, max5[3]), /* avrg dl speed */
- max5data(data->progress.ulspeed, max5[4]), /* avrg ul speed */
- time_total, /* total time */
- time_current, /* current time */
- time_left, /* time left */
- max5data(data->progress.current_speed, max5[5]) /* current speed */
- );
- }
- break;
+ /* We have transfered this much so far */
+ total_transfer = data->progress.downloaded + data->progress.uploaded;
+
+ /* Get the percentage of data transfered so far */
+ if(total_expected_transfer)
+ total_percen=(double)(total_transfer/total_expected_transfer)*100;
+
+ fprintf(stderr,
+ "\r%3d %s %3d %s %3d %s %s %s %s %s %s %s",
+ (int)total_percen, /* total % */
+ max5data(total_expected_transfer, max5[2]), /* total size */
+ (int)dlpercen, /* rcvd % */
+ max5data(data->progress.downloaded, max5[0]), /* rcvd size */
+ (int)ulpercen, /* xfer % */
+ max5data(data->progress.uploaded, max5[1]), /* xfer size */
+
+ max5data(data->progress.dlspeed, max5[3]), /* avrg dl speed */
+ max5data(data->progress.ulspeed, max5[4]), /* avrg ul speed */
+ time_total, /* total time */
+ time_current, /* current time */
+ time_left, /* time left */
+ max5data(data->progress.current_speed, max5[5]) /* current speed */
+ );
+
+
#if 0
case CURL_PROGRESS_BAR:
/* original progress bar code by Lars Aas */
@@ -365,7 +367,8 @@ void pgrsUpdate(struct UrlData *data)
prev = point;
break;
#endif
- }
+
+ return 0;
}