mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
[svn] Revert to calculating ETA based on average download speed.
Published in <sxspu17sl10.fsf@florida.arsdigita.de>.
This commit is contained in:
parent
538307f151
commit
1600aaeaa6
@ -1,3 +1,12 @@
|
|||||||
|
2002-04-10 Hrvoje Niksic <hniksic@arsdigita.com>
|
||||||
|
|
||||||
|
* progress.c (create_image): Revert to calculating ETA based on
|
||||||
|
average download speed.
|
||||||
|
(create_image): Don't print ETA until the download has been active
|
||||||
|
for at least 3 seconds.
|
||||||
|
(create_image): When ETA is not available, don't print anything.
|
||||||
|
The previous version would print --:--.
|
||||||
|
|
||||||
2002-04-10 Hrvoje Niksic <hniksic@arsdigita.com>
|
2002-04-10 Hrvoje Niksic <hniksic@arsdigita.com>
|
||||||
|
|
||||||
* progress.c (bar_update): Keep updating a subinterval until it
|
* progress.c (bar_update): Keep updating a subinterval until it
|
||||||
|
@ -565,14 +565,6 @@ bar_finish (void *progress, long dltime)
|
|||||||
{
|
{
|
||||||
struct bar_progress *bp = progress;
|
struct bar_progress *bp = progress;
|
||||||
|
|
||||||
/* If the download was faster than the granularity of the timer,
|
|
||||||
fake some output so that we don't get the ugly "----.--" rate at
|
|
||||||
the download finish. */
|
|
||||||
if (bp->hist.summed_times == 0)
|
|
||||||
bp->hist.summed_times = 1;
|
|
||||||
if (dltime == 0)
|
|
||||||
dltime = 1;
|
|
||||||
|
|
||||||
create_image (bp, dltime);
|
create_image (bp, dltime);
|
||||||
display_image (bp->buffer);
|
display_image (bp->buffer);
|
||||||
|
|
||||||
@ -600,8 +592,7 @@ create_image (struct bar_progress *bp, long dl_total_time)
|
|||||||
char *size_legible = legible (size);
|
char *size_legible = legible (size);
|
||||||
int size_legible_len = strlen (size_legible);
|
int size_legible_len = strlen (size_legible);
|
||||||
|
|
||||||
long recent_time = bp->hist.summed_times;
|
struct bar_progress_hist *hist = &bp->hist;
|
||||||
long recent_bytes = bp->hist.summed_bytes;
|
|
||||||
|
|
||||||
/* The progress bar should look like this:
|
/* The progress bar should look like this:
|
||||||
xx% [=======> ] nn,nnn 12.34K/s ETA 00:00
|
xx% [=======> ] nn,nnn 12.34K/s ETA 00:00
|
||||||
@ -700,11 +691,12 @@ create_image (struct bar_progress *bp, long dl_total_time)
|
|||||||
p += strlen (p);
|
p += strlen (p);
|
||||||
|
|
||||||
/* " 1012.45K/s" */
|
/* " 1012.45K/s" */
|
||||||
if (recent_time && recent_bytes)
|
if (hist->summed_times && hist->summed_bytes)
|
||||||
{
|
{
|
||||||
static char *short_units[] = { "B/s", "K/s", "M/s", "G/s" };
|
static char *short_units[] = { "B/s", "K/s", "M/s", "G/s" };
|
||||||
int units = 0;
|
int units = 0;
|
||||||
double dlrate = calc_rate (recent_bytes, recent_time, &units);
|
double dlrate;
|
||||||
|
dlrate = calc_rate (hist->summed_bytes, hist->summed_times, &units);
|
||||||
sprintf (p, " %7.2f%s", dlrate, short_units[units]);
|
sprintf (p, " %7.2f%s", dlrate, short_units[units]);
|
||||||
p += strlen (p);
|
p += strlen (p);
|
||||||
}
|
}
|
||||||
@ -712,22 +704,28 @@ create_image (struct bar_progress *bp, long dl_total_time)
|
|||||||
APPEND_LITERAL (" --.--K/s");
|
APPEND_LITERAL (" --.--K/s");
|
||||||
|
|
||||||
/* " ETA xx:xx:xx" */
|
/* " ETA xx:xx:xx" */
|
||||||
if (bp->total_length > 0 && recent_bytes > 0)
|
if (bp->total_length > 0 && dl_total_time > 3000)
|
||||||
{
|
{
|
||||||
long eta;
|
long eta;
|
||||||
int eta_hrs, eta_min, eta_sec;
|
int eta_hrs, eta_min, eta_sec;
|
||||||
|
|
||||||
/* Don't change the value of ETA more than approximately once
|
/* Don't change the value of ETA more than approximately once
|
||||||
per second; doing so would cause flashing without providing
|
per second; doing so would cause flashing without providing
|
||||||
any value to the user. */
|
any value to the user. */
|
||||||
if (dl_total_time - bp->last_eta_time < 900
|
if (dl_total_time - bp->last_eta_time < 900
|
||||||
&& bp->last_eta_value != 0)
|
&& bp->last_eta_value != 0)
|
||||||
eta = bp->last_eta_value;
|
eta = bp->last_eta_value;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
double tm_sofar = (double)recent_time / 1000;
|
/* Calculate ETA using the average download speed to predict
|
||||||
|
the future speed. If you want to use the current speed
|
||||||
|
instead, replace dl_total_time with hist->summed_times
|
||||||
|
and bp->count with hist->summed_bytes. I found that
|
||||||
|
doing that results in a very jerky and ultimately
|
||||||
|
unreliable ETA. */
|
||||||
|
double time_sofar = (double)dl_total_time / 1000;
|
||||||
long bytes_remaining = bp->total_length - size;
|
long bytes_remaining = bp->total_length - size;
|
||||||
eta = (long) (tm_sofar * bytes_remaining / recent_bytes);
|
eta = (long) (time_sofar * bytes_remaining / bp->count);
|
||||||
bp->last_eta_value = eta;
|
bp->last_eta_value = eta;
|
||||||
bp->last_eta_time = dl_total_time;
|
bp->last_eta_time = dl_total_time;
|
||||||
}
|
}
|
||||||
@ -736,34 +734,29 @@ create_image (struct bar_progress *bp, long dl_total_time)
|
|||||||
eta_min = eta / 60, eta %= 60;
|
eta_min = eta / 60, eta %= 60;
|
||||||
eta_sec = eta;
|
eta_sec = eta;
|
||||||
|
|
||||||
/* Pad until the end of screen. The padding is dependent on the
|
|
||||||
hour value. */
|
|
||||||
if (eta_hrs == 0 || eta_hrs > 99)
|
|
||||||
/* Hours not printed: pad with three spaces (two digits and
|
|
||||||
colon). */
|
|
||||||
APPEND_LITERAL (" ");
|
|
||||||
else if (eta_hrs < 10)
|
|
||||||
/* Hours printed with one digit: pad with one space. */
|
|
||||||
*p++ = ' ';
|
|
||||||
else
|
|
||||||
/* Hours printed with two digits: we're using maximum width,
|
|
||||||
don't pad. */
|
|
||||||
;
|
|
||||||
|
|
||||||
APPEND_LITERAL (" ETA ");
|
|
||||||
|
|
||||||
if (eta_hrs > 99)
|
if (eta_hrs > 99)
|
||||||
/* Bogus value, probably due to a calculation overflow. Print
|
goto no_eta;
|
||||||
something safe to avoid overstepping the buffer bounds. */
|
|
||||||
sprintf (p, "--:--");
|
if (eta_hrs == 0)
|
||||||
else if (eta_hrs > 0)
|
{
|
||||||
sprintf (p, "%d:%02d:%02d", eta_hrs, eta_min, eta_sec);
|
/* Hours not printed: pad with three spaces. */
|
||||||
|
APPEND_LITERAL (" ");
|
||||||
|
sprintf (p, " ETA %02d:%02d", eta_min, eta_sec);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
sprintf (p, "%02d:%02d", eta_min, eta_sec);
|
{
|
||||||
|
if (eta_hrs < 10)
|
||||||
|
/* Hours printed with one digit: pad with one space. */
|
||||||
|
*p++ = ' ';
|
||||||
|
sprintf (p, " ETA %d:%02d:%02d", eta_hrs, eta_min, eta_sec);
|
||||||
|
}
|
||||||
p += strlen (p);
|
p += strlen (p);
|
||||||
}
|
}
|
||||||
else if (bp->total_length > 0)
|
else if (bp->total_length > 0)
|
||||||
APPEND_LITERAL (" ETA --:--");
|
{
|
||||||
|
no_eta:
|
||||||
|
APPEND_LITERAL (" ");
|
||||||
|
}
|
||||||
|
|
||||||
assert (p - bp->buffer <= bp->width);
|
assert (p - bp->buffer <= bp->width);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user