[svn] Applied Jonas Jensen's download rate patch with my additions.

Published in <015b01c09084$ce2d9330$0100000a@bob> and
<sxspugq3xai.fsf@florida.arsdigita.de>.
This commit is contained in:
hniksic 2001-02-10 16:00:30 -08:00
parent fdc20de365
commit 366b832e3f
5 changed files with 55 additions and 16 deletions

View File

@ -1,3 +1,24 @@
2001-02-11 Hrvoje Niksic <hniksic@arsdigita.com>
* ftp.c (ftp_loop_internal): Disable padding.
(getftp): Ditto.
* http.c (http_loop): Disable padding.
* retr.c (show_progress): Use it to enable padding.
* retr.c (rate): Optional parameter PAD for padding the rate.
2001-02-10 Hrvoje Niksic <hniksic@arsdigita.com>
* retr.c (show_progress): Make sure that the last output line
includes progress.
2001-02-10 Jonas Jensen <bones@huleboer.dk>
* retr.c (show_progress): Print the download rate along with the
percentages.
2001-02-10 Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>
* ftp.h: Rename enums `command' to `wget_ftp_command' and

View File

@ -839,7 +839,7 @@ Error in server response, closing control connection.\n"));
res = get_contents (dtsock, fp, len, restval, expected_bytes, &con->rbuf, 0);
con->dltime = elapsed_time ();
tms = time_str (NULL);
tmrate = rate (*len - restval, con->dltime);
tmrate = rate (*len - restval, con->dltime, 0);
/* Close data connection socket. */
closeport (dtsock);
/* Close the local file. */
@ -1042,7 +1042,7 @@ ftp_loop_internal (struct urlinfo *u, struct fileinfo *f, ccon *con)
err = getftp (u, &len, restval, con);
/* Time? */
tms = time_str (NULL);
tmrate = rate (len - restval, con->dltime);
tmrate = rate (len - restval, con->dltime, 0);
if (!rbuf_initialized_p (&con->rbuf))
con->st &= ~DONE_CWD;

View File

@ -1596,7 +1596,7 @@ The sizes do not match (local %ld) -- retrieving.\n"), local_size);
strings within it will no longer be used. */
FREEHSTAT (hstat);
tmrate = rate (hstat.len - hstat.restval, hstat.dltime);
tmrate = rate (hstat.len - hstat.restval, hstat.dltime, 0);
if (hstat.len == hstat.contlen)
{

View File

@ -1,5 +1,5 @@
/* File retrieval.
Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
This file is part of Wget.
@ -156,7 +156,7 @@ static void
print_percentage (long bytes, long expected)
{
int percentage = (int)(100.0 * bytes / expected);
logprintf (LOG_VERBOSE, " [%3d%%]", percentage);
logprintf (LOG_VERBOSE, "%3d%%", percentage);
}
/* Show the dotted progress report of file loading. Called with
@ -174,8 +174,9 @@ static int
show_progress (long res, long expected, enum spflags flags)
{
static long line_bytes;
static long offs;
static long offs, initial_skip;
static int ndot, nrow;
static long last_timer, time_offset;
int any_output = 0;
if (flags == SP_FINISH)
@ -185,6 +186,7 @@ show_progress (long res, long expected, enum spflags flags)
int dot = ndot;
char *tmpstr = (char *)alloca (2 * opt.dots_in_line + 1);
char *tmpp = tmpstr;
time_offset = elapsed_time () - last_timer;
for (; dot < opt.dots_in_line; dot++)
{
if (!(dot % opt.dot_spacing))
@ -195,6 +197,9 @@ show_progress (long res, long expected, enum spflags flags)
logputs (LOG_VERBOSE, tmpstr);
print_percentage (nrow * line_bytes + ndot * opt.dot_bytes + offs,
expected);
logprintf (LOG_VERBOSE, " @%s",
rate (ndot * opt.dot_bytes + offs - initial_skip,
time_offset, 1));
}
logputs (LOG_VERBOSE, "\n\n");
return 0;
@ -211,6 +216,9 @@ show_progress (long res, long expected, enum spflags flags)
offs = 0L;
ndot = nrow = 0;
line_bytes = (long)opt.dots_in_line * opt.dot_bytes;
last_timer = elapsed_time ();
time_offset = 0;
initial_skip = res;
if (res)
{
if (res >= line_bytes)
@ -223,7 +231,7 @@ show_progress (long res, long expected, enum spflags flags)
ndot = 0;
}
}
logprintf (LOG_VERBOSE, "\n%5ldK ->", nrow * line_bytes / 1024);
logprintf (LOG_VERBOSE, "\n%5ldK", nrow * line_bytes / 1024);
}
/* Offset gets incremented by current value. */
offs += res;
@ -238,11 +246,19 @@ show_progress (long res, long expected, enum spflags flags)
++ndot;
if (ndot == opt.dots_in_line)
{
time_offset = elapsed_time () - last_timer;
last_timer += time_offset;
ndot = 0;
++nrow;
if (expected)
print_percentage (nrow * line_bytes, expected);
logprintf (LOG_VERBOSE, "\n%5ldK ->", nrow * line_bytes / 1024);
{
print_percentage (nrow * line_bytes, expected);
logprintf (LOG_VERBOSE, " @%s",
rate (line_bytes - initial_skip, time_offset, 1));
}
initial_skip = 0;
logprintf (LOG_VERBOSE, "\n%5ldK", nrow * line_bytes / 1024);
}
}
/* Reenable flushing. */
@ -310,9 +326,12 @@ elapsed_time (void)
/* Print out the appropriate download rate. Appropriate means that if
rate is > 1024 bytes per second, kilobytes are used, and if rate >
1024 * 1024 bps, megabytes are used. */
1024 * 1024 bps, megabytes are used.
If PAD is non-zero, strings will be padded to the width of 7
characters (xxxx.xx). */
char *
rate (long bytes, long msecs)
rate (long bytes, long msecs, int pad)
{
static char res[15];
double dlrate;
@ -320,13 +339,12 @@ rate (long bytes, long msecs)
if (!msecs)
++msecs;
dlrate = (double)1000 * bytes / msecs;
/* #### Should these strings be translatable? */
if (dlrate < 1024.0)
sprintf (res, "%.2f B/s", dlrate);
sprintf (res, pad ? "%7.2f B/s" : "%.2f B/s", dlrate);
else if (dlrate < 1024.0 * 1024.0)
sprintf (res, "%.2f KB/s", dlrate / 1024.0);
sprintf (res, pad ? "%7.2f KB/s" : "%.2f KB/s", dlrate / 1024.0);
else
sprintf (res, "%.2f MB/s", dlrate / (1024.0 * 1024.0));
sprintf (res, pad ? "%7.2f MB/s" : "%.2f MB/s", dlrate / (1024.0 * 1024.0));
return res;
}

View File

@ -30,7 +30,7 @@ uerr_t retrieve_from_file PARAMS ((const char *, int, int *));
void reset_timer PARAMS ((void));
long elapsed_time PARAMS ((void));
char *rate PARAMS ((long, long));
char *rate PARAMS ((long, long, int));
void printwhat PARAMS ((int, int));