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:
84
source/dcc.c
84
source/dcc.c
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user