Replace get_bar_percent() with get_stat_format()

get_stat_format() now returns the entire cparse string, not just the completion bar portion.  This
means we don't need to call convert_output_format() twice.
This commit is contained in:
Kevin Easton
2016-10-29 00:00:27 +11:00
parent 30e1a65efb
commit 031608a4ea

View File

@@ -2467,49 +2467,56 @@ static const char *dcc_get_state(const SocketList *s)
return "Unknown"; return "Unknown";
} }
static const char *get_bar_percent(double pcomplete) /* get_stat_format()
* Returns the cparse format string to use for display the DCC file stat line.
* Includes the inline completion bar if DCC_VAR_TYPE is 0.
*/
#define STAT_FORMAT_PREFIX "#$[3]0 $[6]1%Y$2%n $[11]3 "
#define STAT_FORMAT_SUFFIX " $[7]4 $[7]5 $[7]6 $7-"
static const char *get_stat_format(double pcomplete)
{ {
#ifdef ONLY_STD_CHARS #ifdef ONLY_STD_CHARS
static const char * const _dcc_offer[] = { static const char * const bar_format[] = {
"%K-.........%n", /* 0 */ STAT_FORMAT_PREFIX "%K-.........%n" STAT_FORMAT_SUFFIX, /* 0 */
"%K-.........%n", /* 10 */ STAT_FORMAT_PREFIX "%K-.........%n" STAT_FORMAT_SUFFIX, /* 10 */
"%K-=........%n", /* 20 */ STAT_FORMAT_PREFIX "%K-=........%n" STAT_FORMAT_SUFFIX, /* 20 */
"%K-=*.......%n", /* 30 */ STAT_FORMAT_PREFIX "%K-=*.......%n" STAT_FORMAT_SUFFIX, /* 30 */
"%K-=*%1%K=%0%K......%n", /* 40 */ STAT_FORMAT_PREFIX "%K-=*%1%K=%0%K......%n" STAT_FORMAT_SUFFIX, /* 40 */
"%K-=*%1%K=-%0%K.....%n", /* 50 */ STAT_FORMAT_PREFIX "%K-=*%1%K=-%0%K.....%n" STAT_FORMAT_SUFFIX, /* 50 */
"%K-=*%1%K=-.%0%K....%n", /* 60 */ STAT_FORMAT_PREFIX "%K-=*%1%K=-.%0%K....%n" STAT_FORMAT_SUFFIX, /* 60 */
"%K-=*%1%K=-. %0%K...%n", /* 70 */ STAT_FORMAT_PREFIX "%K-=*%1%K=-. %0%K...%n" STAT_FORMAT_SUFFIX, /* 70 */
"%K-=*%1%K=-. %R.%0%K..%n", /* 80 */ STAT_FORMAT_PREFIX "%K-=*%1%K=-. %R.%0%K..%n" STAT_FORMAT_SUFFIX, /* 80 */
"%K-=*%1%K=-. %R.-%0%K.%n", /* 90 */ STAT_FORMAT_PREFIX "%K-=*%1%K=-. %R.-%0%K.%n" STAT_FORMAT_SUFFIX, /* 90 */
"%K-=*%1%K=-. %R.-=%n"}; /* 100 */ STAT_FORMAT_PREFIX "%K-=*%1%K=-. %R.-=%n" STAT_FORMAT_SUFFIX}; /* 100 */
#else #else
static const char * const _dcc_offer[] = { static const char * const bar_format[] = {
"%K<><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n", /* 0 */ STAT_FORMAT_PREFIX "%K<><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n" STAT_FORMAT_SUFFIX, /* 0 */
"%K<><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n", /* 10 */ STAT_FORMAT_PREFIX "%K<><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n" STAT_FORMAT_SUFFIX, /* 10 */
"%K<><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n", /* 20 */ STAT_FORMAT_PREFIX "%K<><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n" STAT_FORMAT_SUFFIX, /* 20 */
"%K<><4B>۰<EFBFBD><DBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n", /* 30 */ STAT_FORMAT_PREFIX "%K<><4B>۰<EFBFBD><DBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n" STAT_FORMAT_SUFFIX, /* 30 */
"%K<><4B><EFBFBD>%1%K<>%0%K<><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n", /* 40 */ STAT_FORMAT_PREFIX "%K<><4B><EFBFBD>%1%K<>%0%K<><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n" STAT_FORMAT_SUFFIX, /* 40 */
"%K<><4B><EFBFBD>%1%K<><4B>%0%K<><4B><EFBFBD><EFBFBD><EFBFBD>%n", /* 50 */ STAT_FORMAT_PREFIX "%K<><4B><EFBFBD>%1%K<><4B>%0%K<><4B><EFBFBD><EFBFBD><EFBFBD>%n" STAT_FORMAT_SUFFIX, /* 50 */
"%K<><4B><EFBFBD>%1%K<><4B><EFBFBD>%0%K<><4B><EFBFBD><EFBFBD>%n", /* 60 */ STAT_FORMAT_PREFIX "%K<><4B><EFBFBD>%1%K<><4B><EFBFBD>%0%K<><4B><EFBFBD><EFBFBD>%n" STAT_FORMAT_SUFFIX, /* 60 */
"%K<><4B><EFBFBD>%1%K<><4B><EFBFBD><EFBFBD>%0%K<><4B><EFBFBD>%n", /* 70 */ STAT_FORMAT_PREFIX "%K<><4B><EFBFBD>%1%K<><4B><EFBFBD><EFBFBD>%0%K<><4B><EFBFBD>%n" STAT_FORMAT_SUFFIX, /* 70 */
"%K<><4B><EFBFBD>%1%K<><4B><EFBFBD><EFBFBD>%R<>%0%K<><4B>%n", /* 80 */ STAT_FORMAT_PREFIX "%K<><4B><EFBFBD>%1%K<><4B><EFBFBD><EFBFBD>%R<>%0%K<><4B>%n" STAT_FORMAT_SUFFIX, /* 80 */
"%K<><4B><EFBFBD>%1%K<><4B><EFBFBD><EFBFBD>%R<><52>%0%K<>%n", /* 90 */ STAT_FORMAT_PREFIX "%K<><4B><EFBFBD>%1%K<><4B><EFBFBD><EFBFBD>%R<><52>%0%K<>%n" STAT_FORMAT_SUFFIX, /* 90 */
"%K<><4B><EFBFBD>%1%K<><4B><EFBFBD><EFBFBD>%R<><52><EFBFBD>%n"}; /* 100 */ STAT_FORMAT_PREFIX "%K<><4B><EFBFBD>%1%K<><4B><EFBFBD><EFBFBD>%R<><52><EFBFBD>%n" STAT_FORMAT_SUFFIX}; /* 100 */
#endif #endif
const int idx = pcomplete * 10; const int idx = pcomplete * 10;
if (idx >= 0 && idx < (sizeof _dcc_offer / sizeof _dcc_offer[0])) if (!get_int_var(DCC_BAR_TYPE_VAR) &&
return _dcc_offer[idx]; idx >= 0 && idx < (sizeof bar_format / sizeof bar_format[0]))
return empty_string; {
return bar_format[idx];
}
return STAT_FORMAT_PREFIX "$[7]4 $[18]5 $[7]6 $7-";
} }
void dcc_glist(char *command, char *args) void dcc_glist(char *command, char *args)
{ {
#define DCC_FORMAT_STAT_PENDING "#$[3]0 $[6]1%Y$2%n $[11]3 $[25]4 $[7]5 $6-" #define DCC_FORMAT_STAT_PENDING STAT_FORMAT_PREFIX "$[25]4 $[7]5 $6-"
#define DCC_FORMAT_STAT_CHAT "#$[3]0 $[6]1%Y$2%n $[11]3 $[7]4 $[-4]5 $[-3]6 $[-3]7 $[-3]8 $[7]9 $10" #define DCC_FORMAT_STAT_CHAT STAT_FORMAT_PREFIX "$[7]4 $[-4]5 $[-3]6 $[-3]7 $[-3]8 $[7]9 $10"
#define DCC_FORMAT_STAT_BARTYPE_0 "#$[3]0 $[6]1%Y$2%n $[11]3 $4 $[7]5 $[7]6 $[7]7 $8-"
#define DCC_FORMAT_STAT_BARTYPE_1 "#$[3]0 $[6]1%Y$2%n $[11]3 $[7]5 $[18]6 $[7]7 $8-"
int i; int i;
DCC_int *n = NULL; DCC_int *n = NULL;
SocketList *s; SocketList *s;
@@ -2626,7 +2633,6 @@ void dcc_glist(char *command, char *args)
{ {
double bytes = n->bytes_read + n->bytes_sent; double bytes = n->bytes_read + n->bytes_sent;
double pcomplete; /* proportion of transfer completed, 0.0 to 1.0 */ double pcomplete; /* proportion of transfer completed, 0.0 to 1.0 */
char spec[BIG_BUFFER_SIZE];
char percent[20]; char percent[20];
char eta[20]; char eta[20];
char kilobytes[20]; char kilobytes[20];
@@ -2659,7 +2665,6 @@ void dcc_glist(char *command, char *args)
else else
seconds = minutes = 0; seconds = minutes = 0;
strcpy(spec, convert_output_format(get_bar_percent(pcomplete), NULL, NULL));
snprintf(percent, sizeof percent, "%4.1f%%", pcomplete * 100.0); snprintf(percent, sizeof percent, "%4.1f%%", pcomplete * 100.0);
snprintf(eta, sizeof eta, "%02d:%02d", minutes, seconds); snprintf(eta, sizeof eta, "%02d:%02d", minutes, seconds);
snprintf(kilobytes, sizeof kilobytes, "%2.4g", bytes / 1024.0 / xtime); snprintf(kilobytes, sizeof kilobytes, "%2.4g", bytes / 1024.0 / xtime);
@@ -2669,21 +2674,18 @@ void dcc_glist(char *command, char *args)
kilobytes, strip_path(filename), kilobytes, strip_path(filename),
n->encrypt?"E":empty_string)) n->encrypt?"E":empty_string))
{ {
const char *stat_format; const char *stat_format = get_stat_format(pcomplete);
if (!get_int_var(DCC_BAR_TYPE_VAR))
stat_format = DCC_FORMAT_STAT_BARTYPE_0;
else
stat_format = DCC_FORMAT_STAT_BARTYPE_1;
put_it("%s", convert_output_format(stat_format, "%d %s %s %s %s %s %s %s %s", put_it("%s", convert_output_format(stat_format, "%d %s %s %s %s %s %s %s",
n->dccnum, type_name, n->encrypt ? "E":"<EFBFBD>", n->dccnum, type_name, n->encrypt ? "E":"<EFBFBD>",
s->server, spec, percent, eta, kilobytes, s->server, percent, eta, kilobytes,
strip_path(filename))); strip_path(filename)));
} }
/* This prints the second DCC stat line, if DCC_BAR_TYPE is non-zero. */ /* This prints the second DCC stat line, if DCC_BAR_TYPE is non-zero. */
if (do_hook(DCC_STATF1_LIST, "%4.1f %lu %lu %d %d", pcomplete * 100.0, (unsigned long)bytes, (unsigned long)n->filesize, minutes, seconds)) if (do_hook(DCC_STATF1_LIST, "%4.1f %lu %lu %d %d", pcomplete * 100.0, (unsigned long)bytes, (unsigned long)n->filesize, minutes, seconds))
{ {
char spec[BIG_BUFFER_SIZE];
char stats[80]; char stats[80];
char *stat_ptr, *spec_ptr; char *stat_ptr, *spec_ptr;
int size = (int)(BAR_LENGTH * pcomplete); int size = (int)(BAR_LENGTH * pcomplete);