summaryrefslogtreecommitdiff
path: root/src/fe-common
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2002-11-21 18:48:03 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2002-11-21 18:48:03 +0000
commitecff491e025b25261680b83a24f7b934fd36eb4f (patch)
treee0d3d3da3271cd2dd09cbf55bef1c1549bbea811 /src/fe-common
parent5bf764ac14c499f3ecab554a13b62edd343ff47d (diff)
downloadirssi-ecff491e025b25261680b83a24f7b934fd36eb4f.zip
Prettier displaying of DCC transfers, including adding ETA.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@3021 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/fe-common')
-rw-r--r--src/fe-common/irc/dcc/fe-dcc-get.c20
-rw-r--r--src/fe-common/irc/dcc/fe-dcc-send.c11
-rw-r--r--src/fe-common/irc/dcc/fe-dcc.c34
-rw-r--r--src/fe-common/irc/dcc/fe-dcc.h1
-rw-r--r--src/fe-common/irc/dcc/module-formats.c10
5 files changed, 61 insertions, 15 deletions
diff --git a/src/fe-common/irc/dcc/fe-dcc-get.c b/src/fe-common/irc/dcc/fe-dcc-get.c
index 127191ed..5ffcdac5 100644
--- a/src/fe-common/irc/dcc/fe-dcc-get.c
+++ b/src/fe-common/irc/dcc/fe-dcc-get.c
@@ -33,12 +33,18 @@
static void dcc_request(GET_DCC_REC *dcc)
{
+ char *sizestr;
+
if (!IS_DCC_GET(dcc)) return;
+ sizestr = dcc_get_size_str(dcc->size);
+
printformat(dcc->server, NULL, MSGLEVEL_DCC,
ischannel(*dcc->target) ? IRCTXT_DCC_SEND_CHANNEL :
IRCTXT_DCC_SEND, dcc->nick, dcc->addrstr,
- dcc->port, dcc->arg, dcc->size, dcc->target);
+ dcc->port, dcc->arg, sizestr, dcc->target);
+
+ g_free(sizestr);
}
static void dcc_connected(GET_DCC_REC *dcc)
@@ -51,6 +57,7 @@ static void dcc_connected(GET_DCC_REC *dcc)
static void dcc_closed(GET_DCC_REC *dcc)
{
+ char *sizestr, timestr[20];
double kbs;
time_t secs;
@@ -60,16 +67,21 @@ static void dcc_closed(GET_DCC_REC *dcc)
kbs = (double) (dcc->transfd-dcc->skipped) /
(secs == 0 ? 1 : secs) / 1024.0;
+ sizestr = dcc_get_size_str(dcc->transfd);
+ g_snprintf(timestr, sizeof(timestr), "%02d:%02d:%02d",
+ (int)(secs/3600), (int)((secs/60)%60), (int)(secs%60));
+
if (secs == -1) {
/* aborted */
printformat(dcc->server, NULL, MSGLEVEL_DCC,
IRCTXT_DCC_GET_ABORTED, dcc->arg, dcc->nick);
} else {
printformat(dcc->server, NULL, MSGLEVEL_DCC,
- IRCTXT_DCC_GET_COMPLETE, dcc->arg,
- (dcc->transfd+1023)/1024,
- dcc->nick, (long) secs, kbs);
+ IRCTXT_DCC_GET_COMPLETE, dcc->arg, sizestr,
+ dcc->nick, timestr, kbs);
}
+
+ g_free(sizestr);
}
static void dcc_error_file_create(GET_DCC_REC *dcc, const char *fname,
diff --git a/src/fe-common/irc/dcc/fe-dcc-send.c b/src/fe-common/irc/dcc/fe-dcc-send.c
index 1672bdd1..a2c1b159 100644
--- a/src/fe-common/irc/dcc/fe-dcc-send.c
+++ b/src/fe-common/irc/dcc/fe-dcc-send.c
@@ -45,6 +45,7 @@ static void dcc_connected(SEND_DCC_REC *dcc)
static void dcc_closed(SEND_DCC_REC *dcc)
{
+ char *sizestr, timestr[20];
double kbs;
time_t secs;
@@ -60,10 +61,16 @@ static void dcc_closed(SEND_DCC_REC *dcc)
IRCTXT_DCC_SEND_ABORTED,
dcc->arg, dcc->nick);
} else {
+ sizestr = dcc_get_size_str(dcc->transfd);
+ g_snprintf(timestr, sizeof(timestr), "%02d:%02d:%02d",
+ (int)(secs/3600), (int)((secs/60)%60),
+ (int)(secs%60));
+
printformat(dcc->server, NULL, MSGLEVEL_DCC,
IRCTXT_DCC_SEND_COMPLETE,
- dcc->arg, (dcc->transfd+1023)/1024,
- dcc->nick, (long) secs, kbs);
+ dcc->arg, sizestr, dcc->nick, timestr, kbs);
+
+ g_free(sizestr);
}
}
diff --git a/src/fe-common/irc/dcc/fe-dcc.c b/src/fe-common/irc/dcc/fe-dcc.c
index afe230ec..8d82c3ba 100644
--- a/src/fe-common/irc/dcc/fe-dcc.c
+++ b/src/fe-common/irc/dcc/fe-dcc.c
@@ -42,6 +42,15 @@ void fe_dcc_get_deinit(void);
void fe_dcc_send_init(void);
void fe_dcc_send_deinit(void);
+char *dcc_get_size_str(uoff_t size)
+{
+ if (size < 1024)
+ return g_strdup_printf("%"PRIuUOFF_T"B", size);
+ if (size < 1024*1024)
+ return g_strdup_printf("%"PRIuUOFF_T"kB", (size+1023) / 1024);
+ return g_strdup_printf("%"PRIuUOFF_T"MB", size / (1024*1024));
+}
+
static void dcc_request(DCC_REC *dcc)
{
char *service;
@@ -91,17 +100,34 @@ static void dcc_error_unknown_type(const char *type)
void dcc_list_print_file(FILE_DCC_REC *dcc)
{
- time_t going;
+ time_t going, eta;
+ char *transfd_str, *size_str, etastr[20];
+ uoff_t bps;
going = time(NULL) - dcc->starttime;
- if (going == 0) going = 1; /* no division by zeros :) */
+ if (going <= 0) going = 1;
+
+ transfd_str = dcc_get_size_str(dcc->transfd);
+ size_str = dcc_get_size_str(dcc->size);
+
+ bps = (dcc->transfd-dcc->skipped) / going;
+ if (bps == 0) {
+ strcpy(etastr, "(stalled)");
+ } else {
+ eta = (dcc->size - dcc->transfd) / bps;
+ g_snprintf(etastr, sizeof(etastr), "%02d:%02d:%02d",
+ (int)(eta/3600), (int)((eta/60)%60), (int)(eta%60));
+ }
printformat(NULL, NULL, MSGLEVEL_DCC,
IRCTXT_DCC_LIST_LINE_FILE,
dcc->nick, dcc_type2str(dcc->type),
- (dcc->transfd+1023)/1024, (dcc->size+1023)/1024,
+ transfd_str, size_str,
dcc->size == 0 ? 0 : (int)((double)dcc->transfd/(double)dcc->size*100.0),
- (double) (dcc->transfd-dcc->skipped)/going/1024, dcc->arg);
+ (double)bps/1024.0, dcc->arg, etastr);
+
+ g_free(transfd_str);
+ g_free(size_str);
}
static void cmd_dcc_list(const char *data)
diff --git a/src/fe-common/irc/dcc/fe-dcc.h b/src/fe-common/irc/dcc/fe-dcc.h
index 728efe27..f18b4a80 100644
--- a/src/fe-common/irc/dcc/fe-dcc.h
+++ b/src/fe-common/irc/dcc/fe-dcc.h
@@ -1,6 +1,7 @@
#ifndef __FE_DCC_H
#define __FE_DCC_H
+char *dcc_get_size_str(uoff_t size);
void dcc_list_print_file(FILE_DCC_REC *dcc);
#endif
diff --git a/src/fe-common/irc/dcc/module-formats.c b/src/fe-common/irc/dcc/module-formats.c
index ccfae8f1..13258819 100644
--- a/src/fe-common/irc/dcc/module-formats.c
+++ b/src/fe-common/irc/dcc/module-formats.c
@@ -42,18 +42,18 @@ FORMAT_REC fecommon_irc_dcc_formats[] = {
{ "dcc_chat_not_found", "{dcc No DCC CHAT connection open to {nick $0}}", 1, { 0 } },
{ "dcc_chat_connected", "{dcc DCC CHAT connection with {nick $0} [$1 port $2] established}", 3, { 0, 0, 1 } },
{ "dcc_chat_disconnected", "{dcc DCC lost chat to {nick $0}}", 1, { 0 } },
- { "dcc_send", "{dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4 bytes]}", 5, { 0, 0, 1, 0, 2 } },
- { "dcc_send_channel", "{dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4 bytes] requested in channel {channel $5}}", 6, { 0, 0, 1, 0, 2, 0 } },
+ { "dcc_send", "{dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4]}", 5, { 0, 0, 1, 0, 0 } },
+ { "dcc_send_channel", "{dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4 bytes] requested in channel {channel $5}}", 6, { 0, 0, 1, 0, 0, 0 } },
{ "dcc_send_exists", "{dcc DCC already sending file {dccfile $0} for {nick $1}}", 2, { 0, 0 } },
{ "dcc_send_no_route", "{dcc DCC route lost to nick {nick $0} when trying to send file {dccfile $1}}", 2, { 0, 0 } },
{ "dcc_send_not_found", "{dcc DCC not sending file {dccfile $1} to {nick $0}}", 2, { 0, 0 } },
{ "dcc_send_file_open_error", "{dcc DCC can't open file {dccfile $0}: $1}", 2, { 0, 0 } },
{ "dcc_send_connected", "{dcc DCC sending file {dccfile $0} for {nick $1} [$2 port $3]}", 4, { 0, 0, 0, 1 } },
- { "dcc_send_complete", "{dcc DCC sent file {dccfile $0} [{hilight $1}kB] for {nick $2} in {hilight $3} secs [{hilight $4kB/s}]}", 5, { 0, 2, 0, 2, 3 } },
+ { "dcc_send_complete", "{dcc DCC sent file {dccfile $0} [{hilight $1}] for {nick $2} in {hilight $3} [{hilight $4kB/s}]}", 5, { 0, 0, 0, 0, 3 } },
{ "dcc_send_aborted", "{dcc DCC aborted sending file {dccfile $0} for {nick $1}}", 2, { 0, 0 } },
{ "dcc_get_not_found", "{dcc DCC no file offered by {nick $0}}", 1, { 0 } },
{ "dcc_get_connected", "{dcc DCC receiving file {dccfile $0} from {nick $1} [$2 port $3]}", 4, { 0, 0, 0, 1 } },
- { "dcc_get_complete", "{dcc DCC received file {dccfile $0} [$1kB] from {nick $2} in {hilight $3} secs [$4kB/s]}", 5, { 0, 2, 0, 2, 3 } },
+ { "dcc_get_complete", "{dcc DCC received file {dccfile $0} [$1] from {nick $2} in {hilight $3} [$4kB/s]}", 5, { 0, 0, 0, 0, 3 } },
{ "dcc_get_aborted", "{dcc DCC aborted receiving file {dccfile $0} from {nick $1}}", 2, { 0, 0 } },
{ "dcc_get_write_error", "{dcc DCC error writing to file {dccfile $0}: {comment $1}", 2, { 0, 0 } },
{ "dcc_unknown_ctcp", "{dcc DCC unknown ctcp {hilight $0} from {nick $1} [$2]}", 3, { 0, 0, 0 } },
@@ -68,7 +68,7 @@ FORMAT_REC fecommon_irc_dcc_formats[] = {
{ "dcc_lowport", "{dcc Warning: Port sent with DCC request is a lowport ({hilight $0, $1}) - this isn't normal. It is possible the address/port is faked (or maybe someone is just trying to bypass firewall)}", 2, { 1, 0 } },
{ "dcc_list_header", "{dcc DCC connections}", 0 },
{ "dcc_list_line_chat", "{dcc $0 $1}", 2, { 0, 0 } },
- { "dcc_list_line_file", "{dcc $0 $1: $2k of $3k ($4%%) - $5kB/s - $6}", 7, { 0, 0, 2, 2, 1, 3, 0 } },
+ { "dcc_list_line_file", "{dcc $0 $1: %|$2 of $3 ($4%%) - $5kB/s - ETA $7 - $6}", 8, { 0, 0, 0, 0, 1, 3, 0, 0 } },
{ "dcc_list_line_queued_send", "{dcc - $0 $2 (queued)}", 3, { 0, 0, 0 } },
{ "dcc_list_footer", "", 0 },