[svn] Minor progress bar fixes.

Published in <sxsn11dh3fc.fsf@florida.arsdigita.de>.
This commit is contained in:
hniksic 2001-11-23 08:12:53 -08:00
parent eb9a02b828
commit 905472770e
5 changed files with 77 additions and 26 deletions

View File

@ -1,3 +1,14 @@
2001-11-23 Hrvoje Niksic <hniksic@arsdigita.com>
* progress.c: Renamed dp_* functions to dot_* for greater clarity
and consistency with bar_*.
(print_download_speed): Get rid of the unneeded '@' character.
(create_image): Fix download rate geometry.
* progress.c (print_elapsed): Remove spurious space.
(print_elapsed): Renamed to print_download_speed, since that's
what it does.
2001-11-23 Hrvoje Niksic <hniksic@arsdigita.com>
* progress.c (bar_update): If the downloaded amount becomes larger

View File

@ -85,7 +85,7 @@ CMD_DECLARE (cmd_spec_dirstruct);
CMD_DECLARE (cmd_spec_header);
CMD_DECLARE (cmd_spec_htmlify);
CMD_DECLARE (cmd_spec_mirror);
CMD_DECLARE (cmd_spec_progress);
/*CMD_DECLARE (cmd_spec_progress);*/
CMD_DECLARE (cmd_spec_recursive);
CMD_DECLARE (cmd_spec_useragent);
@ -155,7 +155,7 @@ static struct {
{ "pagerequisites", &opt.page_requisites, cmd_boolean },
{ "passiveftp", &opt.ftp_pasv, cmd_lockable_boolean },
{ "passwd", &opt.ftp_pass, cmd_string },
{ "progress", NULL, cmd_spec_progress },
{ "progress", &opt.progress_type, cmd_string },
{ "proxypasswd", &opt.proxy_passwd, cmd_string },
{ "proxyuser", &opt.proxy_user, cmd_string },
{ "quiet", &opt.quiet, cmd_boolean },
@ -249,7 +249,6 @@ defaults (void)
opt.remove_listing = 1;
set_progress_implementation ("dot");
opt.dot_bytes = 1024;
opt.dot_spacing = 10;
opt.dots_in_line = 50;
@ -930,6 +929,7 @@ cmd_spec_mirror (const char *com, const char *val, void *closure)
return 1;
}
#if 0
static int
cmd_spec_progress (const char *com, const char *val, void *closure)
{
@ -942,6 +942,7 @@ cmd_spec_progress (const char *com, const char *val, void *closure)
set_progress_implementation (val);
return 1;
}
#endif
static int
cmd_spec_recursive (const char *com, const char *val, void *closure)

View File

@ -686,6 +686,11 @@ GNU General Public License for more details.\n"));
}
}
/* Initialize progress. Have to do this after the options are
processed so we know where the log file is. */
if (opt.verbose)
set_progress_implementation (opt.progress_type);
/* All user options have now been processed, so it's now safe to do
interoption dependency checks. */

View File

@ -95,6 +95,7 @@ struct options
char *http_proxy, *ftp_proxy, *https_proxy;
char **no_proxy;
char *base_href;
char *progress_type; /* progress indicator type. */
char *proxy_user; /*oli*/
char *proxy_passwd;
#ifdef HAVE_SELECT

View File

@ -43,10 +43,10 @@ struct progress_implementation {
/* Necessary forward declarations. */
static void *dp_create PARAMS ((long, long));
static void dp_update PARAMS ((void *, long));
static void dp_finish PARAMS ((void *));
static void dp_set_params PARAMS ((const char *));
static void *dot_create PARAMS ((long, long));
static void dot_update PARAMS ((void *, long));
static void dot_finish PARAMS ((void *));
static void dot_set_params PARAMS ((const char *));
static void *bar_create PARAMS ((long, long));
static void bar_update PARAMS ((void *, long));
@ -54,11 +54,19 @@ static void bar_finish PARAMS ((void *));
static void bar_set_params PARAMS ((const char *));
static struct progress_implementation implementations[] = {
{ "dot", dp_create, dp_update, dp_finish, dp_set_params },
{ "dot", dot_create, dot_update, dot_finish, dot_set_params },
{ "bar", bar_create, bar_update, bar_finish, bar_set_params }
};
static struct progress_implementation *current_impl;
/* Default progress implementation should be something that works
under all display types. If you put something other than "dot"
here, remember that bar_set_params tries to switch to this if we're
not running on a TTY. So changing this to "bar" could cause
infloop. */
#define DEFAULT_PROGRESS_IMPLEMENTATION "dot"
/* Return non-zero if NAME names a valid progress bar implementation.
The characters after the first : will be ignored. */
@ -81,10 +89,15 @@ valid_progress_implementation_p (const char *name)
void
set_progress_implementation (const char *name)
{
int i = 0;
int i, namelen;
struct progress_implementation *pi = implementations;
char *colon = strchr (name, ':');
int namelen = colon ? colon - name : strlen (name);
char *colon;
if (!name)
name = DEFAULT_PROGRESS_IMPLEMENTATION;
colon = strchr (name, ':');
namelen = colon ? colon - name : strlen (name);
for (i = 0; i < ARRAY_SIZE (implementations); i++, pi++)
if (!strncmp (pi->name, name, namelen))
@ -154,7 +167,7 @@ struct dot_progress {
/* Dot-progress backend for progress_create. */
static void *
dp_create (long initial, long total)
dot_create (long initial, long total)
{
struct dot_progress *dp = xmalloc (sizeof (struct dot_progress));
@ -204,10 +217,10 @@ print_percentage (long bytes, long expected)
}
static void
print_elapsed (struct dot_progress *dp, long bytes)
print_download_speed (struct dot_progress *dp, long bytes)
{
long timer_value = wtimer_elapsed (dp->timer);
logprintf (LOG_VERBOSE, " @ %s",
logprintf (LOG_VERBOSE, " %s",
rate (bytes, timer_value - dp->last_timer_value, 1));
dp->last_timer_value = timer_value;
}
@ -215,7 +228,7 @@ print_elapsed (struct dot_progress *dp, long bytes)
/* Dot-progress backend for progress_update. */
static void
dp_update (void *progress, long howmuch)
dot_update (void *progress, long howmuch)
{
struct dot_progress *dp = progress;
int dot_bytes = opt.dot_bytes;
@ -242,7 +255,8 @@ dp_update (void *progress, long howmuch)
if (dp->total_length)
print_percentage (dp->rows * row_bytes, dp->total_length);
print_elapsed (dp, row_bytes - (dp->initial_length % row_bytes));
print_download_speed (dp,
row_bytes - (dp->initial_length % row_bytes));
}
}
@ -252,7 +266,7 @@ dp_update (void *progress, long howmuch)
/* Dot-progress backend for progress_finish. */
static void
dp_finish (void *progress)
dot_finish (void *progress)
{
struct dot_progress *dp = progress;
int dot_bytes = opt.dot_bytes;
@ -275,9 +289,9 @@ dp_finish (void *progress)
dp->total_length);
}
print_elapsed (dp, dp->dots * dot_bytes
+ dp->accumulated
- dp->initial_length % row_bytes);
print_download_speed (dp, dp->dots * dot_bytes
+ dp->accumulated
- dp->initial_length % row_bytes);
logputs (LOG_VERBOSE, "\n\n");
log_set_flush (0);
@ -292,7 +306,7 @@ dp_finish (void *progress)
giga. */
static void
dp_set_params (const char *params)
dot_set_params (const char *params)
{
if (!params)
return;
@ -449,7 +463,7 @@ create_image (struct bar_progress *bp, long dltime)
"xxx% " - percentage - 5 chars
"| ... | " - progress bar decorations - 3 chars
"1234.56 K/s " - dl rate - 12 chars
"1012.56 K/s " - dl rate - 12 chars
"nnnn " - downloaded bytes - 11 chars
"ETA: xx:xx:xx" - ETA - 13 chars
@ -498,7 +512,7 @@ create_image (struct bar_progress *bp, long dltime)
*p++ = ' ';
}
/* "2.3 KB/s " */
/* "1012.45 K/s " */
if (dltime && bp->count)
{
char *rt = rate (bp->count, dltime, 1);
@ -508,8 +522,8 @@ create_image (struct bar_progress *bp, long dltime)
}
else
{
strcpy (p, "----.-- KB/s ");
p += 13;
strcpy (p, "----.-- K/s ");
p += 12;
}
/* "12376 " */
@ -560,6 +574,9 @@ create_image (struct bar_progress *bp, long dltime)
*p = '\0';
}
/* Print the contents of the buffer as a one-line ASCII "image" so
that it can be overwritten next time. */
static void
display_image (char *buf)
{
@ -577,7 +594,23 @@ display_image (char *buf)
static void
bar_set_params (const char *ignored)
{
int sw = determine_screen_width ();
int sw;
if (opt.lfilename
#ifdef HAVE_ISATTY
|| !isatty (fileno (stderr))
#else
1
#endif
)
{
/* We're not printing to a TTY. Revert to the fallback
display. */
set_progress_implementation (NULL);
return;
}
sw = determine_screen_width ();
if (sw && sw >= MINIMUM_SCREEN_WIDTH)
screen_width = sw;
}