diff --git a/src/fe-common/irc/fe-events-numeric.c b/src/fe-common/irc/fe-events-numeric.c index 951bd31f..8035cebf 100644 --- a/src/fe-common/irc/fe-events-numeric.c +++ b/src/fe-common/irc/fe-events-numeric.c @@ -35,6 +35,7 @@ #include #include #include +#include static void print_event_received(IRC_SERVER_REC *server, const char *data, const char *nick, int target_param); @@ -138,38 +139,6 @@ static void event_end_of_who(IRC_SERVER_REC *server, const char *data) g_free(params); } -/* Get time elapsed since an event */ -static char *time_ago(time_t seconds) -{ - static char ret[128]; - long unsigned years, weeks, days, hours, minutes; - - seconds = time(NULL) - seconds; - - years = seconds / (86400 * 365); - seconds %= (86400 * 365); - weeks = seconds / 604800; - days = (seconds / 86400) % 7; - hours = (seconds / 3600) % 24; - minutes = (seconds / 60) % 60; - seconds %= 60; - - if (years) - snprintf(ret, sizeof(ret), "%luy %luw %lud", years, weeks, days); - else if (weeks) - snprintf(ret, sizeof(ret), "%luw %lud %luh", weeks, days, hours); - else if (days) - snprintf(ret, sizeof(ret), "%lud %luh %lum", days, hours, minutes); - else if (hours) - snprintf(ret, sizeof(ret), "%luh %lum", hours, minutes); - else if (minutes) - snprintf(ret, sizeof(ret), "%lum %lus", minutes, (long unsigned) seconds); - else - snprintf(ret, sizeof(ret), "%lus", (long unsigned) seconds); - - return ret; -} - static void event_ban_list(IRC_SERVER_REC *server, const char *data) { IRC_CHANNEL_REC *chanrec; diff --git a/src/fe-common/irc/fe-irc-channels.c b/src/fe-common/irc/fe-irc-channels.c index 93ff3603..39752984 100644 --- a/src/fe-common/irc/fe-irc-channels.c +++ b/src/fe-common/irc/fe-irc-channels.c @@ -73,6 +73,38 @@ const char *fe_channel_skip_prefix(IRC_SERVER_REC *server, const char *target) return target; } +/* Get time elapsed since an event */ +char *time_ago(time_t seconds) +{ + static char ret[128]; + long unsigned years, weeks, days, hours, minutes; + + seconds = time(NULL) - seconds; + + years = seconds / (86400 * 365); + seconds %= (86400 * 365); + weeks = seconds / 604800; + days = (seconds / 86400) % 7; + hours = (seconds / 3600) % 24; + minutes = (seconds / 60) % 60; + seconds %= 60; + + if (years) + snprintf(ret, sizeof(ret), "%luy %luw %lud", years, weeks, days); + else if (weeks) + snprintf(ret, sizeof(ret), "%luw %lud %luh", weeks, days, hours); + else if (days) + snprintf(ret, sizeof(ret), "%lud %luh %lum", days, hours, minutes); + else if (hours) + snprintf(ret, sizeof(ret), "%luh %lum", hours, minutes); + else if (minutes) + snprintf(ret, sizeof(ret), "%lum %lus", minutes, (long unsigned) seconds); + else + snprintf(ret, sizeof(ret), "%lus", (long unsigned) seconds); + + return ret; +} + static void sig_channel_rejoin(SERVER_REC *server, REJOIN_REC *rec) { g_return_if_fail(rec != NULL); diff --git a/src/fe-common/irc/fe-irc-channels.h b/src/fe-common/irc/fe-irc-channels.h index a5770107..080cd484 100644 --- a/src/fe-common/irc/fe-irc-channels.h +++ b/src/fe-common/irc/fe-irc-channels.h @@ -3,6 +3,7 @@ int fe_channel_is_opchannel(IRC_SERVER_REC *server, const char *target); const char *fe_channel_skip_prefix(IRC_SERVER_REC *server, const char *target); +char *time_ago(time_t seconds); void fe_irc_channels_init(void); void fe_irc_channels_deinit(void); diff --git a/src/fe-common/irc/fe-irc-commands.c b/src/fe-common/irc/fe-irc-commands.c index 40ad36e0..368a3fa6 100644 --- a/src/fe-common/irc/fe-irc-commands.c +++ b/src/fe-common/irc/fe-irc-commands.c @@ -39,6 +39,7 @@ #include #include #include +#include /* SYNTAX: ME */ static void cmd_me(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item) @@ -224,15 +225,16 @@ static void bans_show_channel(IRC_CHANNEL_REC *channel, IRC_SERVER_REC *server) /* show bans.. */ counter = 1; for (tmp = channel->banlist; tmp != NULL; tmp = tmp->next) { + char *timestr, *ago; BAN_REC *rec = tmp->data; + timestr = my_asctime(rec->time); + ago = time_ago(rec->time); printformat(server, channel->visible_name, MSGLEVEL_CRAP, - (rec->setby == NULL || *rec->setby == '\0') ? - IRCTXT_BANLIST : IRCTXT_BANLIST_LONG, - counter, channel->visible_name, - rec->ban, rec->setby, - (int) (time(NULL)-rec->time)); - counter++; + (rec->setby == NULL || *rec->setby == '\0') ? IRCTXT_BANLIST : + IRCTXT_BANLIST_LONG, + counter, channel->visible_name, rec->ban, rec->setby, ago, timestr); + counter++; } }