From 1efdf062c6529871c4fe3bc497138f91a72ada02 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Mon, 19 Nov 2001 22:34:50 +0000 Subject: Removed whois_coming-flag which was used to figure out if 301 event should be printed as whois-message or normal "nick is away" message. Server redirections are used for that now. Some servers also send 301 event in /WHOWAS reply, this works now as well. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@2104 dbcabf3a-b0e7-0310-adc4-f8d773084564 --- src/fe-common/irc/fe-events-numeric.c | 53 ++++++++++++++++++++++------------- src/irc/core/irc-commands.c | 2 ++ src/irc/core/irc-nicklist.c | 9 ------ src/irc/core/irc-servers.h | 1 - 4 files changed, 36 insertions(+), 29 deletions(-) diff --git a/src/fe-common/irc/fe-events-numeric.c b/src/fe-common/irc/fe-events-numeric.c index 62cf8bcf..d219b9a7 100644 --- a/src/fe-common/irc/fe-events-numeric.c +++ b/src/fe-common/irc/fe-events-numeric.c @@ -261,7 +261,7 @@ static void event_channel_created(IRC_SERVER_REC *server, const char *data) g_free(params); } -static void event_away(IRC_SERVER_REC *server, const char *data) +static void event_nowaway(IRC_SERVER_REC *server, const char *data) { printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_AWAY); } @@ -271,6 +271,29 @@ static void event_unaway(IRC_SERVER_REC *server, const char *data) printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_UNAWAY); } +static void event_away(IRC_SERVER_REC *server, const char *data) +{ + char *params, *nick, *awaymsg; + + g_return_if_fail(data != NULL); + + params = event_get_params(data, 3, NULL, &nick, &awaymsg); + if (!settings_get_bool("show_away_once") || + last_away_nick == NULL || g_strcasecmp(last_away_nick, nick) != 0 || + last_away_msg == NULL || g_strcasecmp(last_away_msg, awaymsg) != 0) { + /* don't show the same away message + from the same nick all the time */ + g_free_not_null(last_away_nick); + g_free_not_null(last_away_msg); + last_away_nick = g_strdup(nick); + last_away_msg = g_strdup(awaymsg); + + printformat(server, nick, MSGLEVEL_CRAP, + IRCTXT_NICK_AWAY, nick, awaymsg); + } + g_free(params); +} + static void event_userhost(IRC_SERVER_REC *server, const char *data) { char *params, *hosts; @@ -479,20 +502,8 @@ static void event_whois_away(IRC_SERVER_REC *server, const char *data) g_return_if_fail(data != NULL); params = event_get_params(data, 3, NULL, &nick, &awaymsg); - if (server->whois_coming || !settings_get_bool("show_away_once") || - last_away_nick == NULL || g_strcasecmp(last_away_nick, nick) != 0 || - last_away_msg == NULL || g_strcasecmp(last_away_msg, awaymsg) != 0) { - /* don't show the same away message - from the same nick all the time */ - g_free_not_null(last_away_nick); - g_free_not_null(last_away_msg); - last_away_nick = g_strdup(nick); - last_away_msg = g_strdup(awaymsg); - - printformat(server, nick, MSGLEVEL_CRAP, - server->whois_coming ? IRCTXT_WHOIS_AWAY : - IRCTXT_NICK_AWAY, nick, awaymsg); - } + printformat(server, nick, MSGLEVEL_CRAP, + IRCTXT_WHOIS_AWAY, nick, awaymsg); g_free(params); } @@ -734,10 +745,12 @@ void fe_events_numeric_init(void) signal_add("event 333", (SIGNAL_FUNC) event_topic_info); signal_add("event 324", (SIGNAL_FUNC) event_channel_mode); signal_add("event 329", (SIGNAL_FUNC) event_channel_created); - signal_add("event 306", (SIGNAL_FUNC) event_away); + signal_add("event 306", (SIGNAL_FUNC) event_nowaway); signal_add("event 305", (SIGNAL_FUNC) event_unaway); + signal_add("event 301", (SIGNAL_FUNC) event_away); signal_add("event 311", (SIGNAL_FUNC) event_whois); - signal_add("event 301", (SIGNAL_FUNC) event_whois_away); + signal_add("whois away", (SIGNAL_FUNC) event_whois_away); + signal_add("whowas away", (SIGNAL_FUNC) event_whois_away); signal_add("event 312", (SIGNAL_FUNC) event_whois_server); signal_add("event 313", (SIGNAL_FUNC) event_whois_oper); signal_add("event 307", (SIGNAL_FUNC) event_whois_registered); @@ -807,10 +820,12 @@ void fe_events_numeric_deinit(void) signal_remove("event 333", (SIGNAL_FUNC) event_topic_info); signal_remove("event 324", (SIGNAL_FUNC) event_channel_mode); signal_remove("event 329", (SIGNAL_FUNC) event_channel_created); - signal_remove("event 306", (SIGNAL_FUNC) event_away); + signal_remove("event 306", (SIGNAL_FUNC) event_nowaway); signal_remove("event 305", (SIGNAL_FUNC) event_unaway); + signal_remove("event 301", (SIGNAL_FUNC) event_away); signal_remove("event 311", (SIGNAL_FUNC) event_whois); - signal_remove("event 301", (SIGNAL_FUNC) event_whois_away); + signal_remove("whois away", (SIGNAL_FUNC) event_whois_away); + signal_remove("whowas away", (SIGNAL_FUNC) event_whois_away); signal_remove("event 312", (SIGNAL_FUNC) event_whois_server); signal_remove("event 313", (SIGNAL_FUNC) event_whois_oper); signal_remove("event 307", (SIGNAL_FUNC) event_whois_registered); diff --git a/src/irc/core/irc-commands.c b/src/irc/core/irc-commands.c index 9bc20ea4..d9a74d49 100644 --- a/src/irc/core/irc-commands.c +++ b/src/irc/core/irc-commands.c @@ -388,6 +388,7 @@ static void cmd_whois(const char *data, IRC_SERVER_REC *server, NULL, "event 318", "whois end", "event 402", event_402, + "event 301", "whois away", /* 301 can come as a reply to /MSG, /WHOIS or /WHOWAS */ "event 401", "whois not found", "event 311", "whois event", NULL); g_free(str); @@ -453,6 +454,7 @@ static void cmd_whowas(const char *data, IRC_SERVER_REC *server) nicks_redir = get_redirect_nicklist(nicks, &free_nick); server_redirect_event(server, "whowas", 1, nicks_redir, -1, NULL, + "event 301", "whowas away", /* 301 can come as a reply to /MSG, /WHOIS or /WHOWAS */ "event 314", "whowas event", NULL); if (free_nick) g_free(nicks_redir); diff --git a/src/irc/core/irc-nicklist.c b/src/irc/core/irc-nicklist.c index 31b072ba..5614c7d0 100644 --- a/src/irc/core/irc-nicklist.c +++ b/src/irc/core/irc-nicklist.c @@ -196,8 +196,6 @@ static void event_whois(IRC_SERVER_REC *server, const char *data) g_return_if_fail(data != NULL); - server->whois_coming = TRUE; - /* first remove the gone-flag, if user is gone it will be set later.. */ params = event_get_params(data, 6, NULL, &nick, NULL, @@ -242,11 +240,6 @@ static void event_whois_ircop(SERVER_REC *server, const char *data) g_free(params); } -static void event_end_of_whois(IRC_SERVER_REC *server, const char *data) -{ - server->whois_coming = FALSE; -} - static void event_nick_in_use(IRC_SERVER_REC *server, const char *data) { char *str; @@ -373,7 +366,6 @@ void irc_nicklist_init(void) signal_add_first("event 311", (SIGNAL_FUNC) event_whois); signal_add_first("event 301", (SIGNAL_FUNC) event_whois_away); signal_add_first("event 313", (SIGNAL_FUNC) event_whois_ircop); - signal_add("event 318", (SIGNAL_FUNC) event_end_of_whois); signal_add("event 353", (SIGNAL_FUNC) event_names_list); signal_add("event 366", (SIGNAL_FUNC) event_end_of_names); signal_add("event 433", (SIGNAL_FUNC) event_nick_in_use); @@ -393,7 +385,6 @@ void irc_nicklist_deinit(void) signal_remove("event 311", (SIGNAL_FUNC) event_whois); signal_remove("event 301", (SIGNAL_FUNC) event_whois_away); signal_remove("event 313", (SIGNAL_FUNC) event_whois_ircop); - signal_remove("event 318", (SIGNAL_FUNC) event_end_of_whois); signal_remove("event 353", (SIGNAL_FUNC) event_names_list); signal_remove("event 366", (SIGNAL_FUNC) event_end_of_names); signal_remove("event 433", (SIGNAL_FUNC) event_nick_in_use); diff --git a/src/irc/core/irc-servers.h b/src/irc/core/irc-servers.h index a7322f09..957a3022 100644 --- a/src/irc/core/irc-servers.h +++ b/src/irc/core/irc-servers.h @@ -48,7 +48,6 @@ struct _IRC_SERVER_REC { char *userhost; /* /USERHOST - set when joined to first channel */ int channels_formed; /* channels formed in irc network */ - unsigned int whois_coming:1; /* Mostly just to display away message right.. */ unsigned int whois_found:1; /* Did WHOIS return any entries? */ unsigned int whowas_found:1; /* Did WHOWAS return any entries? */ -- cgit v1.2.3