diff options
author | Nils Görs <weechatter@arcor.de> | 2012-11-02 18:15:24 +0100 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2012-11-02 18:15:24 +0100 |
commit | 8e5d3138858533d8f367b12090f0271ec6b643dd (patch) | |
tree | fa9b2f21ac409f23ccc9955600f10af68d798e63 /src/plugins/irc/irc-protocol.c | |
parent | b1005fc23e963e55cf6606888e14b60b4ab27d2b (diff) | |
download | weechat-8e5d3138858533d8f367b12090f0271ec6b643dd.zip |
irc: add command /quiet, fix display of messages 728/729 (quiet list, end of quiet list) (task #12278)
Diffstat (limited to 'src/plugins/irc/irc-protocol.c')
-rw-r--r-- | src/plugins/irc/irc-protocol.c | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/src/plugins/irc/irc-protocol.c b/src/plugins/irc/irc-protocol.c index 40faffcf3..e0999ea77 100644 --- a/src/plugins/irc/irc-protocol.c +++ b/src/plugins/irc/irc-protocol.c @@ -4307,6 +4307,122 @@ IRC_PROTOCOL_CALLBACK(438) } /* + * irc_protocol_cb_728: '728' command received (quietlist) + */ + +IRC_PROTOCOL_CALLBACK(728) +{ + struct t_irc_channel *ptr_channel; + struct t_gui_buffer *ptr_buffer; + time_t datetime; + + /* + * 728 message looks like: + * :server 728 mynick #channel mode quietmask nick!user@host 1351350090 + */ + + IRC_PROTOCOL_MIN_ARGS(6); + + ptr_channel = irc_channel_search (server, argv[3]); + ptr_buffer = (ptr_channel && ptr_channel->nicks) ? + ptr_channel->buffer : server->buffer; + if (argc >= 8) + { + datetime = (time_t)(atol (argv[7])); + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, "quietlist", + ptr_buffer), + irc_protocol_tags (command, "irc_numeric", NULL), + /* TRANSLATORS: "%s" after "on" is a date */ + _("%s%s[%s%s%s] %s%s%s quieted by " + "%s%s %s(%s%s%s)%s on %s"), + weechat_prefix ("network"), + IRC_COLOR_CHAT_DELIMITERS, + IRC_COLOR_CHAT_CHANNEL, + argv[3], + IRC_COLOR_CHAT_DELIMITERS, + IRC_COLOR_CHAT_HOST, + argv[5], + IRC_COLOR_RESET, + irc_nick_color_for_server_message (server, NULL, + irc_message_get_nick_from_host (argv[5])), + irc_message_get_nick_from_host (argv[6]), + IRC_COLOR_CHAT_DELIMITERS, + IRC_COLOR_CHAT_HOST, + irc_message_get_address_from_host (argv[6]), + IRC_COLOR_CHAT_DELIMITERS, + IRC_COLOR_RESET, + weechat_util_get_time_string (&datetime)); + } + else + { + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, "quietlist", + ptr_buffer), + irc_protocol_tags (command, "irc_numeric", NULL), + _("%s%s[%s%s%s] %s%s%s quieted by " + "%s%s %s(%s%s%s)"), + weechat_prefix ("network"), + IRC_COLOR_CHAT_DELIMITERS, + IRC_COLOR_CHAT_CHANNEL, + argv[3], + IRC_COLOR_CHAT_DELIMITERS, + IRC_COLOR_CHAT_HOST, + argv[5], + IRC_COLOR_RESET, + irc_nick_color_for_server_message (server, NULL, + irc_message_get_nick_from_host (argv[6])), + irc_message_get_nick_from_host (argv[6]), + IRC_COLOR_CHAT_DELIMITERS, + IRC_COLOR_CHAT_HOST, + irc_message_get_address_from_host (argv[6]), + IRC_COLOR_CHAT_DELIMITERS); + } + + return WEECHAT_RC_OK; +} + +/* + * irc_protocol_cb_729: '729' command received (end of quietlist) + */ + +IRC_PROTOCOL_CALLBACK(729) +{ + char *pos_args; + struct t_irc_channel *ptr_channel; + struct t_gui_buffer *ptr_buffer; + + /* + * 729 message looks like: + * :server 729 mynick #channel mode :End of Channel Quiet List + */ + + IRC_PROTOCOL_MIN_ARGS(5); + + pos_args = (argc > 5) ? + ((argv_eol[5][0] == ':') ? argv_eol[5] + 1 : argv_eol[5]) : NULL; + + ptr_channel = irc_channel_search (server, argv[3]); + ptr_buffer = (ptr_channel && ptr_channel->nicks) ? + ptr_channel->buffer : server->buffer; + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, "quietlist", + ptr_buffer), + irc_protocol_tags (command, "irc_numeric", NULL), + "%s%s[%s%s%s]%s%s%s", + weechat_prefix ("network"), + IRC_COLOR_CHAT_DELIMITERS, + IRC_COLOR_CHAT_CHANNEL, + argv[3], + IRC_COLOR_CHAT_DELIMITERS, + IRC_COLOR_RESET, + (pos_args) ? " " : "", + (pos_args) ? pos_args : ""); + + return WEECHAT_RC_OK; +} + +/* * irc_protocol_cb_900: '900' command (logged in as (SASL)) */ @@ -4540,6 +4656,8 @@ irc_protocol_recv_command (struct t_irc_server *server, { "501", /* unknown mode flag */ 1, 0, &irc_protocol_cb_generic_error }, { "502", /* can't change mode for other users */ 1, 0, &irc_protocol_cb_generic_error }, { "671", /* whois (secure connection) */ 1, 0, &irc_protocol_cb_whois_nick_msg }, + { "728", /* quietlist */ 1, 0, &irc_protocol_cb_728 }, + { "729", /* end of quietlist */ 1, 0, &irc_protocol_cb_729 }, { "900", /* logged in as (SASL) */ 1, 0, &irc_protocol_cb_900 }, { "901", /* you are now logged in */ 1, 0, &irc_protocol_cb_901 }, { "903", /* SASL authentication successful */ 1, 0, &irc_protocol_cb_sasl_end }, |