|
|
} | } |
| |
static void | static void |
print_percentage (wgint bytes, wgint expected) |
print_percentage (long bytes, long expected, |
{ |
long row_size, |
int percentage = (int)(100.0 * bytes / expected); |
long dltime, struct dot_progress *dp ) |
logprintf (LOG_VERBOSE, "%3d%%", percentage); |
{ |
|
int percentage = -1; |
|
long d_time = 0; /* time elapsed since last call */ |
|
long speed = 0; /* download speed in bytes/sec */ |
|
long estimate = 0; /* estimated remaining time in seconds */ |
|
char buf[100]; |
|
char* pc; |
|
|
|
pc = buf; |
|
*pc = 0; |
|
|
|
if( dltime > dp->last_timer_value ) |
|
{ |
|
d_time = dltime - dp->last_timer_value; |
|
speed = (long)( row_size / ( d_time / 1000.0 ) ); |
|
if ( speed > 0 ) |
|
estimate = ( expected - bytes ) / speed; |
|
dp->last_timer_value = dltime; |
|
} |
|
|
|
if ( expected ) |
|
percentage = (int)(100.0 * bytes / expected); |
|
pc += sprintf( pc, percentage >= 0 ? "%3d%% " : " ??%% ", percentage ); |
|
|
|
if ( d_time == 0 ) { /* we are too fast :) -- print percentage only */ |
|
logprintf( LOG_VERBOSE, "%s", buf ); |
|
return; |
|
} |
|
|
|
/* print download rate */ |
|
if ( speed < 1024 ) |
|
pc += sprintf( pc, "%4ldB", speed ); |
|
else if ( speed < 1024*10 ) |
|
pc += sprintf( pc, "%4.2fK", speed / 1024.0 ); |
|
else if ( speed < 1024*100 ) |
|
pc += sprintf( pc, "%4.1fK", speed / 1024.0 ); |
|
else if ( speed < 1024*1000 ) |
|
pc += sprintf( pc, "%4.0fK", speed / 1024.0 ); |
|
else if ( speed < 1024*1024*10 ) |
|
pc += sprintf( pc, "%4.2fM", speed / (1024.0*1024.0) ); |
|
else if ( speed < 1024*1024*100 ) |
|
pc += sprintf( pc, "%4.1fM", speed / (1024.0*1024.0) ); |
|
else |
|
pc += sprintf( pc, "%4.0fM", speed / (1024.0*1024.0) ); |
|
|
|
/* print ETA in minutes:seconds */ |
|
pc += sprintf( pc, estimate > 0 ? "%4ld:%02ld" : " ", estimate / 60, estimate % 60 ); |
|
|
|
logprintf( LOG_VERBOSE, "%s", buf ); |
} | } |
| |
static void | static void |
|
|
++dp->rows; | ++dp->rows; |
dp->dots = 0; | dp->dots = 0; |
| |
if (dp->total_length) |
print_percentage (dp->rows * row_bytes, dp->total_length, |
print_percentage (dp->rows * row_bytes, dp->total_length); |
row_qty, dltime, dp ); |
print_download_speed (dp, row_qty, dltime); |
|
} | } |
} | } |
| |
|
|
logputs (LOG_VERBOSE, " "); | logputs (LOG_VERBOSE, " "); |
logputs (LOG_VERBOSE, " "); | logputs (LOG_VERBOSE, " "); |
} | } |
if (dp->total_length) |
|
{ |
|
print_percentage (dp->rows * row_bytes |
|
+ dp->dots * dot_bytes |
|
+ dp->accumulated, |
|
dp->total_length); |
|
} |
|
|
|
{ | { |
wgint row_qty = dp->dots * dot_bytes + dp->accumulated; | wgint row_qty = dp->dots * dot_bytes + dp->accumulated; |
if (dp->rows == dp->initial_length / row_bytes) | if (dp->rows == dp->initial_length / row_bytes) |
row_qty -= dp->initial_length % row_bytes; | row_qty -= dp->initial_length % row_bytes; |
print_download_speed (dp, row_qty, dltime); |
print_percentage (dp->rows * row_bytes |
|
+ dp->dots * dot_bytes |
|
+ dp->accumulated, |
|
dp->total_length, row_qty, dltime, dp ); |
} | } |
| |
logputs (LOG_VERBOSE, "\n\n"); | logputs (LOG_VERBOSE, "\n\n"); |