degesch: process RPL_CREATIONTIME
This commit is contained in:
parent
e1aa27c90b
commit
6d720e7a1a
37
degesch.c
37
degesch.c
|
@ -4840,6 +4840,41 @@ irc_handle_rpl_channelmodeis (struct server *s, const struct irc_message *msg)
|
||||||
refresh_prompt (s->ctx);
|
refresh_prompt (s->ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
make_time_string (time_t time)
|
||||||
|
{
|
||||||
|
char buf[32];
|
||||||
|
struct tm tm;
|
||||||
|
strftime (buf, sizeof buf, "%a %b %d %Y %T", localtime_r (&time, &tm));
|
||||||
|
return xstrdup (buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
irc_handle_rpl_creationtime (struct server *s, const struct irc_message *msg)
|
||||||
|
{
|
||||||
|
if (msg->params.len < 3)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const char *channel_name = msg->params.vector[1];
|
||||||
|
const char *creation_time = msg->params.vector[2];
|
||||||
|
|
||||||
|
unsigned long created;
|
||||||
|
if (!xstrtoul (&created, creation_time, 10))
|
||||||
|
return;
|
||||||
|
|
||||||
|
struct channel *channel = str_map_find (&s->irc_channels, channel_name);
|
||||||
|
struct buffer *buffer = str_map_find (&s->irc_buffer_map, channel_name);
|
||||||
|
hard_assert ((channel && buffer) ||
|
||||||
|
(channel && !buffer) || (!channel && !buffer));
|
||||||
|
|
||||||
|
if (buffer)
|
||||||
|
{
|
||||||
|
char *x = make_time_string (created);
|
||||||
|
buffer_send_status (s->ctx, buffer, "Channel created on %s", x);
|
||||||
|
free (x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
irc_handle_isupport_prefix (struct server *s, char *value)
|
irc_handle_isupport_prefix (struct server *s, char *value)
|
||||||
{
|
{
|
||||||
|
@ -5031,6 +5066,8 @@ irc_process_numeric (struct server *s,
|
||||||
irc_handle_rpl_topic (s, msg); buffer = NULL; break;
|
irc_handle_rpl_topic (s, msg); buffer = NULL; break;
|
||||||
case IRC_RPL_CHANNELMODEIS:
|
case IRC_RPL_CHANNELMODEIS:
|
||||||
irc_handle_rpl_channelmodeis (s, msg); buffer = NULL; break;
|
irc_handle_rpl_channelmodeis (s, msg); buffer = NULL; break;
|
||||||
|
case IRC_RPL_CREATIONTIME:
|
||||||
|
irc_handle_rpl_creationtime (s, msg); buffer = NULL; break;
|
||||||
|
|
||||||
case IRC_ERR_NICKNAMEINUSE:
|
case IRC_ERR_NICKNAMEINUSE:
|
||||||
// TODO: if (state == IRC_CONNECTED), use a different nick;
|
// TODO: if (state == IRC_CONNECTED), use a different nick;
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
322 IRC_RPL_LIST "%s %d :%s"
|
322 IRC_RPL_LIST "%s %d :%s"
|
||||||
323 IRC_RPL_LISTEND ":End of LIST"
|
323 IRC_RPL_LISTEND ":End of LIST"
|
||||||
324 IRC_RPL_CHANNELMODEIS "%s +%s"
|
324 IRC_RPL_CHANNELMODEIS "%s +%s"
|
||||||
|
329 IRC_RPL_CREATIONTIME "%s %lld"
|
||||||
331 IRC_RPL_NOTOPIC "%s :No topic is set"
|
331 IRC_RPL_NOTOPIC "%s :No topic is set"
|
||||||
332 IRC_RPL_TOPIC "%s :%s"
|
332 IRC_RPL_TOPIC "%s :%s"
|
||||||
346 IRC_RPL_INVITELIST "%s %s"
|
346 IRC_RPL_INVITELIST "%s %s"
|
||||||
|
|
Loading…
Reference in New Issue