From afed542bfbe481dff03c51cd0763366f30107670 Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Thu, 21 Apr 2022 23:02:17 +0200 Subject: [PATCH] Merge pull request #82 from ailin-nemui/progval-help Format RPL_HELPSTART/RPL_HELPTXT/RPL_ENDOFHELP (cherry picked from commit b446d06b9dd5e2c4d7d279da52c5e499d463d8e6) --- src/common.h | 2 +- src/fe-common/irc/fe-events-numeric.c | 51 +++++++++++++++++++++++++++ src/fe-common/irc/module-formats.c | 3 ++ src/fe-common/irc/module-formats.h | 7 ++-- 4 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/common.h b/src/common.h index 7f8604f3..ad5c88bb 100644 --- a/src/common.h +++ b/src/common.h @@ -6,7 +6,7 @@ #define IRSSI_GLOBAL_CONFIG "irssi.conf" /* config file name in /etc/ */ #define IRSSI_HOME_CONFIG "config" /* config file name in ~/.irssi/ */ -#define IRSSI_ABI_VERSION 44 +#define IRSSI_ABI_VERSION 45 #define DEFAULT_SERVER_ADD_PORT 6667 #define DEFAULT_SERVER_ADD_TLS_PORT 6697 diff --git a/src/fe-common/irc/fe-events-numeric.c b/src/fe-common/irc/fe-events-numeric.c index f78289c0..34ba3fe7 100644 --- a/src/fe-common/irc/fe-events-numeric.c +++ b/src/fe-common/irc/fe-events-numeric.c @@ -554,6 +554,51 @@ static void event_489(IRC_SERVER_REC *server, const char *data, const char *nick g_free(params); } +static void event_help(IRC_SERVER_REC *server, int formatnum, const char *data) +{ + /* Common handling for umerics 704 (RPL_HELPSTART), 705 (RPL_HELPTXT), + * and 706 (RPL_ENDOFHELP); sent as a reply to HELP or HELPOP command. + */ + char *params, *topic, *help_text; + + g_return_if_fail(data != NULL); + + params = event_get_params(data, 3, NULL, &topic, &help_text); + + g_return_if_fail(help_text != NULL); + + if (help_text[0] == '\0') { + /* Empty lines can be used by servers for styling; and we need to replace + * them with something non-empty or they would be dropped when displayed. + */ + help_text = " "; + } + + printformat(server, NULL, MSGLEVEL_CRAP, formatnum, topic, help_text); + g_free(params); +} + +static void event_helpstart(IRC_SERVER_REC *server, const char *data, const char *nick) +{ + /* Numeric 704 (RPL_HELPSTART) sent as a reply to HELP or HELPOP command. + */ + event_help(server, IRCTXT_SERVER_HELP_START, data); +} + +static void event_helptxt(IRC_SERVER_REC *server, const char *data, const char *nick) +{ + /* Numeric 705 (RPL_HELPTXT), sent as a reply to HELP or HELPOP command. + */ + event_help(server, IRCTXT_SERVER_HELP_TXT, data); +} + +static void event_endofhelp(IRC_SERVER_REC *server, const char *data, const char *nick) +{ + /* Numeric 706 (RPL_ENDOFHELP), sent as a reply to HELP or HELPOP command. + */ + event_help(server, IRCTXT_SERVER_END_OF_HELP, data); +} + static void event_target_too_fast(IRC_SERVER_REC *server, const char *data, const char *nick) { @@ -713,6 +758,9 @@ void fe_events_numeric_init(void) signal_add("event 372", (SIGNAL_FUNC) event_motd); signal_add("event 422", (SIGNAL_FUNC) event_motd); signal_add("event 439", (SIGNAL_FUNC) event_target_too_fast); + signal_add("event 704", (SIGNAL_FUNC) event_helpstart); + signal_add("event 705", (SIGNAL_FUNC) event_helptxt); + signal_add("event 706", (SIGNAL_FUNC) event_endofhelp); signal_add("event 707", (SIGNAL_FUNC) event_target_too_fast); signal_add("default event numeric", (SIGNAL_FUNC) event_numeric); @@ -808,6 +856,9 @@ void fe_events_numeric_deinit(void) signal_remove("event 372", (SIGNAL_FUNC) event_motd); signal_remove("event 422", (SIGNAL_FUNC) event_motd); signal_remove("event 439", (SIGNAL_FUNC) event_target_too_fast); + signal_remove("event 704", (SIGNAL_FUNC) event_helpstart); + signal_remove("event 705", (SIGNAL_FUNC) event_helptxt); + signal_remove("event 706", (SIGNAL_FUNC) event_endofhelp); signal_remove("event 707", (SIGNAL_FUNC) event_target_too_fast); signal_remove("default event numeric", (SIGNAL_FUNC) event_numeric); diff --git a/src/fe-common/irc/module-formats.c b/src/fe-common/irc/module-formats.c index 1a96cbce..0adb2680 100644 --- a/src/fe-common/irc/module-formats.c +++ b/src/fe-common/irc/module-formats.c @@ -89,6 +89,9 @@ FORMAT_REC fecommon_irc_formats[] = { { "invitelist_long", "{channel $0}: invite {ban $1} {comment by {nick $2}, $3 secs ago}", 4, { 0, 0, 0, 1 } }, { "no_such_channel", "{channel $0}: No such channel", 1, { 0 } }, { "channel_synced", "Join to {channel $0} was synced in {hilight $1} secs", 2, { 0, 2 } }, + { "server_help_start", "$1", 2, { 0, 0 } }, + { "server_help_txt", "$1", 2, { 0, 0 } }, + { "server_end_of_help", "$1", 2, { 0, 0 } }, /* ---- */ { NULL, "Nick", 0 }, diff --git a/src/fe-common/irc/module-formats.h b/src/fe-common/irc/module-formats.h index 5abd04a4..a9d29cb0 100644 --- a/src/fe-common/irc/module-formats.h +++ b/src/fe-common/irc/module-formats.h @@ -66,6 +66,9 @@ enum { IRCTXT_INVITELIST_LONG, IRCTXT_NO_SUCH_CHANNEL, IRCTXT_CHANNEL_SYNCED, + IRCTXT_SERVER_HELP_START, + IRCTXT_SERVER_HELP_TXT, + IRCTXT_SERVER_END_OF_HELP, IRCTXT_FILL_4, @@ -89,7 +92,7 @@ enum { IRCTXT_WHOIS_OPER, IRCTXT_WHOIS_MODES, IRCTXT_WHOIS_REALHOST, - IRCTXT_WHOIS_USERMODE, + IRCTXT_WHOIS_USERMODE, IRCTXT_WHOIS_CHANNELS, IRCTXT_WHOIS_AWAY, IRCTXT_WHOIS_SPECIAL, @@ -143,7 +146,7 @@ enum { IRCTXT_SILENCED, IRCTXT_UNSILENCED, IRCTXT_SILENCE_LINE, - IRCTXT_ASK_OPER_PASS, + IRCTXT_ASK_OPER_PASS, IRCTXT_ACCEPT_LIST }; /* clang-format on */