diff options
author | Marius Halden <marius.h@lden.org> | 2016-03-21 13:55:32 +0100 |
---|---|---|
committer | Marius Halden <marius.h@lden.org> | 2016-05-07 14:27:54 +0200 |
commit | a21ce7901fd2d4f81cddcd7f5d30346d28dfc316 (patch) | |
tree | f9b21bfdc6a500be799c05b8f8d17011002937bd | |
parent | 58feabffb4155be993b822b105f5fec73377fcfd (diff) |
Add server-time capability
-rw-r--r-- | irc.h | 1 | ||||
-rw-r--r-- | irc_cap.c | 1 | ||||
-rw-r--r-- | irc_im.c | 26 |
3 files changed, 23 insertions, 5 deletions
@@ -80,6 +80,7 @@ typedef enum { CAP_EXTENDED_JOIN = (1 << 2), CAP_AWAY_NOTIFY = (1 << 3), CAP_USERHOST_IN_NAMES = (1 << 4), + CAP_SERVER_TIME = (1 << 5), } irc_cap_flag_t; struct irc_user; @@ -42,6 +42,7 @@ static const cap_info_t supported_caps[] = { {"extended-join", CAP_EXTENDED_JOIN}, {"away-notify", CAP_AWAY_NOTIFY}, {"userhost-in-names", CAP_USERHOST_IN_NAMES}, + {"server-time", CAP_SERVER_TIME}, {NULL}, }; @@ -224,9 +224,16 @@ static gboolean bee_irc_user_msg(bee_t *bee, bee_user_t *bu, const char *msg_, g char *wrapped, *ts = NULL; char *msg = g_strdup(msg_); char *message_type = "PRIVMSG"; + char *tags = NULL; GSList *l; - - if (sent_at > 0 && set_getbool(&irc->b->set, "display_timestamps")) { + struct tm msg_time; + + if (sent_at > 0 && (irc->caps & CAP_SERVER_TIME)) { + gmtime_r(&sent_at, &msg_time); + tags = g_strdup_printf("time=%04d-%02d-%02dT%02d:%02d:%02d.000Z", + msg_time.tm_year + 1900, msg_time.tm_mon + 1, msg_time.tm_mday, + msg_time.tm_hour, msg_time.tm_min, msg_time.tm_sec); + } else if (sent_at > 0 && set_getbool(&irc->b->set, "display_timestamps")) { ts = irc_format_timestamp(irc, sent_at); } @@ -299,13 +306,14 @@ static gboolean bee_irc_user_msg(bee_t *bee, bee_user_t *bu, const char *msg_, g } wrapped = word_wrap(msg, 425); - irc_send_msg(src_iu, message_type, dst, wrapped, prefix); + irc_send_msg_tagged(src_iu, message_type, dst, wrapped, prefix, tags); g_free(wrapped); cleanup: g_free(prefix); g_free(msg); g_free(ts); + g_free(tags); return TRUE; } @@ -663,19 +671,27 @@ static gboolean bee_irc_chat_msg(bee_t *bee, struct groupchat *c, bee_user_t *bu irc_user_t *iu = flags & OPT_SELFMESSAGE ? irc->user : bu->ui_data; irc_channel_t *ic = c->ui_data; char *wrapped, *ts = NULL; + char *tags = NULL; + struct tm msg_time; if (ic == NULL) { return FALSE; } - if (sent_at > 0 && set_getbool(&bee->set, "display_timestamps")) { + if (sent_at > 0 && (irc->caps & CAP_SERVER_TIME)) { + gmtime_r(&sent_at, &msg_time); + tags = g_strdup_printf("time=%04d-%02d-%02dT%02d:%02d:%02d.000Z", + msg_time.tm_year + 1900, msg_time.tm_mon + 1, msg_time.tm_mday, + msg_time.tm_hour, msg_time.tm_min, msg_time.tm_sec); + } else if (sent_at > 0 && set_getbool(&bee->set, "display_timestamps")) { ts = irc_format_timestamp(irc, sent_at); } wrapped = word_wrap(msg, 425); - irc_send_msg(iu, "PRIVMSG", ic->name, wrapped, ts); + irc_send_msg_tagged(iu, "PRIVMSG", ic->name, wrapped, ts, tags); g_free(ts); g_free(wrapped); + g_free(tags); return TRUE; } |