1
0
mirror of https://github.com/moparisthebest/wget synced 2024-07-03 16:38:41 -04:00

progress: Split update into update and draw

This commit is contained in:
Giuseppe Scrivano 2013-11-02 15:36:52 +01:00 committed by Darshit Shah
parent 848d7537e1
commit 67a4c6cf97
2 changed files with 37 additions and 8 deletions

View File

@ -1,3 +1,12 @@
2013-11-02 Giuseppe Scrivano <gscrivan@redhat.com>
* progress.c (struct progress_implementation): New method draw.
(bar_update): Split into...
(bar_draw): ...this new function.
(dot_update): Split into...
(dot_draw): New function.
(progress_update): Also invoke draw on `current_impl'.
2014-04-22 Tim Ruehsen <tim.ruehsen@gmx.de> 2014-04-22 Tim Ruehsen <tim.ruehsen@gmx.de>
* http.c (gethttp): Fix 204 response handling * http.c (gethttp): Fix 204 response handling

View File

@ -49,6 +49,7 @@ struct progress_implementation {
bool interactive; bool interactive;
void *(*create) (wgint, wgint); void *(*create) (wgint, wgint);
void (*update) (void *, wgint, double); void (*update) (void *, wgint, double);
void (*draw) (void *);
void (*finish) (void *, double); void (*finish) (void *, double);
void (*set_params) (const char *); void (*set_params) (const char *);
}; };
@ -58,16 +59,18 @@ struct progress_implementation {
static void *dot_create (wgint, wgint); static void *dot_create (wgint, wgint);
static void dot_update (void *, wgint, double); static void dot_update (void *, wgint, double);
static void dot_finish (void *, double); static void dot_finish (void *, double);
static void dot_draw (void *);
static void dot_set_params (const char *); static void dot_set_params (const char *);
static void *bar_create (wgint, wgint); static void *bar_create (wgint, wgint);
static void bar_update (void *, wgint, double); static void bar_update (void *, wgint, double);
static void bar_draw (void *);
static void bar_finish (void *, double); static void bar_finish (void *, double);
static void bar_set_params (const char *); static void bar_set_params (const char *);
static struct progress_implementation implementations[] = { static struct progress_implementation implementations[] = {
{ "dot", 0, dot_create, dot_update, dot_finish, dot_set_params }, { "dot", 0, dot_create, dot_update, dot_draw, dot_finish, dot_set_params },
{ "bar", 1, bar_create, bar_update, bar_finish, bar_set_params } { "bar", 1, bar_create, bar_update, bar_draw, bar_finish, bar_set_params }
}; };
static struct progress_implementation *current_impl; static struct progress_implementation *current_impl;
static int current_impl_locked; static int current_impl_locked;
@ -182,6 +185,7 @@ void
progress_update (void *progress, wgint howmuch, double dltime) progress_update (void *progress, wgint howmuch, double dltime)
{ {
current_impl->update (progress, howmuch, dltime); current_impl->update (progress, howmuch, dltime);
current_impl->draw (progress);
} }
/* Tell the progress gauge to clean up. Calling this will free the /* Tell the progress gauge to clean up. Calling this will free the
@ -204,6 +208,7 @@ struct dot_progress {
int accumulated; /* number of bytes accumulated after int accumulated; /* number of bytes accumulated after
the last printed dot */ the last printed dot */
double dltime; /* download time so far */
int rows; /* number of rows printed so far */ int rows; /* number of rows printed so far */
int dots; /* number of dots printed in this row */ int dots; /* number of dots printed in this row */
@ -342,6 +347,14 @@ print_row_stats (struct dot_progress *dp, double dltime, bool last)
static void static void
dot_update (void *progress, wgint howmuch, double dltime) dot_update (void *progress, wgint howmuch, double dltime)
{
struct dot_progress *dp = progress;
dp->accumulated += howmuch;
dp->dltime = dltime;
}
static void
dot_draw (void *progress)
{ {
struct dot_progress *dp = progress; struct dot_progress *dp = progress;
int dot_bytes = opt.dot_bytes; int dot_bytes = opt.dot_bytes;
@ -349,7 +362,6 @@ dot_update (void *progress, wgint howmuch, double dltime)
log_set_flush (false); log_set_flush (false);
dp->accumulated += howmuch;
for (; dp->accumulated >= dot_bytes; dp->accumulated -= dot_bytes) for (; dp->accumulated >= dot_bytes; dp->accumulated -= dot_bytes)
{ {
if (dp->dots == 0) if (dp->dots == 0)
@ -366,7 +378,7 @@ dot_update (void *progress, wgint howmuch, double dltime)
++dp->rows; ++dp->rows;
dp->dots = 0; dp->dots = 0;
print_row_stats (dp, dltime, false); print_row_stats (dp, dp->dltime, false);
} }
} }
@ -505,6 +517,7 @@ struct bar_progress {
measured since the beginning of measured since the beginning of
download. */ download. */
double dltime; /* download time so far */
int width; /* screen width we're using at the int width; /* screen width we're using at the
time the progress gauge was time the progress gauge was
created. this is different from created. this is different from
@ -595,8 +608,8 @@ static void
bar_update (void *progress, wgint howmuch, double dltime) bar_update (void *progress, wgint howmuch, double dltime)
{ {
struct bar_progress *bp = progress; struct bar_progress *bp = progress;
bool force_screen_update = false;
bp->dltime = dltime;
bp->count += howmuch; bp->count += howmuch;
if (bp->total_length > 0 if (bp->total_length > 0
&& bp->count + bp->initial_length > bp->total_length) && bp->count + bp->initial_length > bp->total_length)
@ -608,6 +621,13 @@ bar_update (void *progress, wgint howmuch, double dltime)
bp->total_length = bp->initial_length + bp->count; bp->total_length = bp->initial_length + bp->count;
update_speed_ring (bp, howmuch, dltime); update_speed_ring (bp, howmuch, dltime);
}
static void
bar_draw (void *progress)
{
bool force_screen_update = false;
struct bar_progress *bp = progress;
/* If SIGWINCH (the window size change signal) been received, /* If SIGWINCH (the window size change signal) been received,
determine the new screen size and update the screen. */ determine the new screen size and update the screen. */
@ -628,13 +648,13 @@ bar_update (void *progress, wgint howmuch, double dltime)
received_sigwinch = 0; received_sigwinch = 0;
} }
if (dltime - bp->last_screen_update < REFRESH_INTERVAL && !force_screen_update) if (bp->dltime - bp->last_screen_update < REFRESH_INTERVAL && !force_screen_update)
/* Don't update more often than five times per second. */ /* Don't update more often than five times per second. */
return; return;
create_image (bp, dltime, false); create_image (bp, bp->dltime, false);
display_image (bp->buffer); display_image (bp->buffer);
bp->last_screen_update = dltime; bp->last_screen_update = bp->dltime;
} }
static void static void