From e62e55c0ab83cc643ee7c221dc0610ffecc18537 Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Tue, 13 Aug 2019 01:05:57 +0200 Subject: [PATCH] show invites of other users when provided --- src/fe-common/core/fe-ignore-messages.c | 10 ++++++++++ src/fe-common/core/fe-messages.c | 16 ++++++++++++++++ src/fe-common/core/module-formats.c | 1 + src/fe-common/core/module-formats.h | 1 + src/fe-common/irc/fe-events.c | 13 +++++++++---- src/irc/core/channel-events.c | 10 ++++++++-- src/irc/core/irc-servers.c | 1 + src/irc/core/irc-servers.h | 1 + 8 files changed, 47 insertions(+), 6 deletions(-) diff --git a/src/fe-common/core/fe-ignore-messages.c b/src/fe-common/core/fe-ignore-messages.c index 73ebd01f..6bcfb6da 100644 --- a/src/fe-common/core/fe-ignore-messages.c +++ b/src/fe-common/core/fe-ignore-messages.c @@ -98,6 +98,14 @@ static void sig_message_invite(SERVER_REC *server, const char *channel, signal_stop(); } +static void sig_message_invite_other(SERVER_REC *server, const char *channel, + const char *invited, const char *nick, const char *address) +{ + if (ignore_check(server, nick, address, + channel, invited, MSGLEVEL_INVITES)) + signal_stop(); +} + static void sig_message_topic(SERVER_REC *server, const char *channel, const char *topic, const char *nick, const char *address) @@ -118,6 +126,7 @@ void fe_ignore_messages_init(void) signal_add_first("message nick", (SIGNAL_FUNC) sig_message_nick); signal_add_first("message own_nick", (SIGNAL_FUNC) sig_message_own_nick); signal_add_first("message invite", (SIGNAL_FUNC) sig_message_invite); + signal_add_first("message invite_other", (SIGNAL_FUNC) sig_message_invite_other); signal_add_first("message topic", (SIGNAL_FUNC) sig_message_topic); } @@ -132,5 +141,6 @@ void fe_ignore_messages_deinit(void) signal_remove("message nick", (SIGNAL_FUNC) sig_message_nick); signal_remove("message own_nick", (SIGNAL_FUNC) sig_message_own_nick); signal_remove("message invite", (SIGNAL_FUNC) sig_message_invite); + signal_remove("message invite_other", (SIGNAL_FUNC) sig_message_invite_other); signal_remove("message topic", (SIGNAL_FUNC) sig_message_topic); } diff --git a/src/fe-common/core/fe-messages.c b/src/fe-common/core/fe-messages.c index 4e1c2596..37c0ef39 100644 --- a/src/fe-common/core/fe-messages.c +++ b/src/fe-common/core/fe-messages.c @@ -538,6 +538,20 @@ static void sig_message_invite(SERVER_REC *server, const char *channel, g_free(str); } +static void sig_message_invite_other(SERVER_REC *server, const char *channel, + const char *invited, const char *nick, const char *address) +{ + char *str; + int level = MSGLEVEL_INVITES; + + ignore_check_plus(server, nick, address, channel, invited, &level, FALSE); + + str = show_lowascii(channel); + printformat(server, channel, level, + TXT_INVITE_OTHER, invited, nick, str, address); + g_free(str); +} + static void sig_message_topic(SERVER_REC *server, const char *channel, const char *topic, const char *nick, const char *address) @@ -706,6 +720,7 @@ void fe_messages_init(void) signal_add_last("message nick", (SIGNAL_FUNC) sig_message_nick); signal_add_last("message own_nick", (SIGNAL_FUNC) sig_message_own_nick); signal_add_last("message invite", (SIGNAL_FUNC) sig_message_invite); + signal_add_last("message invite_other", (SIGNAL_FUNC) sig_message_invite_other); signal_add_last("message topic", (SIGNAL_FUNC) sig_message_topic); signal_add("nicklist new", (SIGNAL_FUNC) sig_nicklist_new); @@ -730,6 +745,7 @@ void fe_messages_deinit(void) signal_remove("message kick", (SIGNAL_FUNC) sig_message_kick); signal_remove("message nick", (SIGNAL_FUNC) sig_message_nick); signal_remove("message own_nick", (SIGNAL_FUNC) sig_message_own_nick); + signal_remove("message invite_other", (SIGNAL_FUNC) sig_message_invite_other); signal_remove("message invite", (SIGNAL_FUNC) sig_message_invite); signal_remove("message topic", (SIGNAL_FUNC) sig_message_topic); diff --git a/src/fe-common/core/module-formats.c b/src/fe-common/core/module-formats.c index 50d8d7cc..2532d82f 100644 --- a/src/fe-common/core/module-formats.c +++ b/src/fe-common/core/module-formats.c @@ -101,6 +101,7 @@ FORMAT_REC fecommon_core_formats[] = { { "quit_once", "{channel $3} {channick $0} {chanhost $1} has quit {reason $2}", 4, { 0, 0, 0, 0 } }, { "invite", "{nick $0} invites you to {channel $1}", 3, { 0, 0, 0 } }, { "not_invited", "You have not been invited to a channel!", 0 }, + { "invite_other", "{nick $0} has been invited to {channel $2} by {channick_hilight $1}", 4, { 0, 0, 0, 0 } }, { "new_topic", "{nick $0} changed the topic of {channel $1} to: $2", 4, { 0, 0, 0, 0 } }, { "topic_unset", "Topic unset by {nick $0} on {channel $1}", 4, { 0, 0, 0, 0 } }, { "your_nick_changed", "You're now known as {nick $1}", 4, { 0, 0, 0, 0 } }, diff --git a/src/fe-common/core/module-formats.h b/src/fe-common/core/module-formats.h index 181aa4c2..c5e2c4d1 100644 --- a/src/fe-common/core/module-formats.h +++ b/src/fe-common/core/module-formats.h @@ -77,6 +77,7 @@ enum { TXT_QUIT_ONCE, TXT_INVITE, TXT_NOT_INVITED, + TXT_INVITE_OTHER, TXT_NEW_TOPIC, TXT_TOPIC_UNSET, TXT_YOUR_NICK_CHANGED, diff --git a/src/fe-common/irc/fe-events.c b/src/fe-common/irc/fe-events.c index 8b3fe3ec..c26f2e88 100644 --- a/src/fe-common/irc/fe-events.c +++ b/src/fe-common/irc/fe-events.c @@ -252,13 +252,18 @@ static void event_pong(IRC_SERVER_REC *server, const char *data, const char *nic static void event_invite(IRC_SERVER_REC *server, const char *data, const char *nick, const char *addr) { - char *params, *channel; + char *params, *invited, *channel; g_return_if_fail(data != NULL); - params = event_get_params(data, 2, NULL, &channel); - signal_emit("message invite", 4, - server, get_visible_target(server, channel), nick, addr); + params = event_get_params(data, 2, &invited, &channel); + if (server->nick_comp_func(invited, server->nick) == 0) { + signal_emit("message invite", 4, + server, get_visible_target(server, channel), nick, addr); + } else { + signal_emit("message invite_other", 5, + server, get_visible_target(server, channel), invited, nick, addr); + } g_free(params); } diff --git a/src/irc/core/channel-events.c b/src/irc/core/channel-events.c index 7603a14f..3cdfe964 100644 --- a/src/irc/core/channel-events.c +++ b/src/irc/core/channel-events.c @@ -336,11 +336,17 @@ static void event_kick(IRC_SERVER_REC *server, const char *data) static void event_invite(IRC_SERVER_REC *server, const char *data) { - char *params, *channel, *shortchan; + char *params, *nick, *channel, *shortchan; g_return_if_fail(data != NULL); - params = event_get_params(data, 2, NULL, &channel); + params = event_get_params(data, 2, &nick, &channel); + + if (server->nick_comp_func(nick, server->nick) != 0) { + /* someone else was invited, no need to do anything */ + g_free(params); + return; + } if (irc_channel_find(server, channel) == NULL) { /* check if we're supposed to autojoin this channel */ diff --git a/src/irc/core/irc-servers.c b/src/irc/core/irc-servers.c index 195ced02..5e98e724 100644 --- a/src/irc/core/irc-servers.c +++ b/src/irc/core/irc-servers.c @@ -236,6 +236,7 @@ static void server_init(IRC_SERVER_REC *server) irc_cap_toggle(server, CAP_MULTI_PREFIX, TRUE); irc_cap_toggle(server, CAP_EXTENDED_JOIN, TRUE); irc_cap_toggle(server, CAP_SETNAME, TRUE); + irc_cap_toggle(server, CAP_INVITE_NOTIFY, TRUE); irc_send_cmd_now(server, "CAP LS " CAP_LS_VERSION); diff --git a/src/irc/core/irc-servers.h b/src/irc/core/irc-servers.h index 15ca7452..5313c1d0 100644 --- a/src/irc/core/irc-servers.h +++ b/src/irc/core/irc-servers.h @@ -19,6 +19,7 @@ #define CAP_MULTI_PREFIX "multi-prefix" #define CAP_EXTENDED_JOIN "extended-join" #define CAP_SETNAME "draft/setname" +#define CAP_INVITE_NOTIFY "invite-notify" /* returns IRC_SERVER_REC if it's IRC server, NULL if it isn't */ #define IRC_SERVER(server) \