diff options
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/irc/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/plugins/irc/Makefile.am | 2 | ||||
-rw-r--r-- | src/plugins/irc/irc-config.c | 93 | ||||
-rw-r--r-- | src/plugins/irc/irc-config.h | 8 | ||||
-rw-r--r-- | src/plugins/irc/irc-msgbuffer.c | 142 | ||||
-rw-r--r-- | src/plugins/irc/irc-msgbuffer.h | 46 | ||||
-rw-r--r-- | src/plugins/irc/irc-protocol.c | 162 |
7 files changed, 410 insertions, 44 deletions
diff --git a/src/plugins/irc/CMakeLists.txt b/src/plugins/irc/CMakeLists.txt index fe8d18e95..2919caa4c 100644 --- a/src/plugins/irc/CMakeLists.txt +++ b/src/plugins/irc/CMakeLists.txt @@ -30,6 +30,7 @@ irc-ignore.c irc-ignore.h irc-info.c irc-info.h irc-input.c irc-input.h irc-mode.c irc-mode.h +irc-msgbuffer.c irc-msgbuffer.h irc-nick.c irc-nick.h irc-protocol.c irc-protocol.h irc-raw.c irc-raw.h diff --git a/src/plugins/irc/Makefile.am b/src/plugins/irc/Makefile.am index 09f1b5adc..88231dc0d 100644 --- a/src/plugins/irc/Makefile.am +++ b/src/plugins/irc/Makefile.am @@ -50,6 +50,8 @@ irc_la_SOURCES = irc.c \ irc-input.h \ irc-mode.c \ irc-mode.h \ + irc-msgbuffer.c \ + irc-msgbuffer.h \ irc-nick.c \ irc-nick.h \ irc-protocol.c \ diff --git a/src/plugins/irc/irc-config.c b/src/plugins/irc/irc-config.c index 89423d9b1..388455a7a 100644 --- a/src/plugins/irc/irc-config.c +++ b/src/plugins/irc/irc-config.c @@ -32,12 +32,14 @@ #include "irc-ctcp.h" #include "irc-buffer.h" #include "irc-ignore.h" +#include "irc-msgbuffer.h" #include "irc-nick.h" #include "irc-server.h" #include "irc-channel.h" struct t_config_file *irc_config_file = NULL; +struct t_config_section *irc_config_section_msgbuffer = NULL; struct t_config_section *irc_config_section_ctcp = NULL; struct t_config_section *irc_config_section_server_default = NULL; struct t_config_section *irc_config_section_server = NULL; @@ -59,6 +61,7 @@ struct t_config_option *irc_config_look_display_old_topic; struct t_config_option *irc_config_look_hide_nickserv_pwd; struct t_config_option *irc_config_look_highlight_tags; struct t_config_option *irc_config_look_item_display_server; +struct t_config_option *irc_config_look_msgbuffer_fallback; struct t_config_option *irc_config_look_notice_as_pv; struct t_config_option *irc_config_look_raw_messages; struct t_config_option *irc_config_look_show_away_once; @@ -555,6 +558,72 @@ irc_config_reload (void *data, struct t_config_file *config_file) } /* + * irc_config_msgbuffer_create_option: set a message target buffer + */ + +int +irc_config_msgbuffer_create_option (void *data, + struct t_config_file *config_file, + struct t_config_section *section, + const char *option_name, const char *value) +{ + struct t_config_option *ptr_option; + int rc; + const char *pos_name; + + /* make C compiler happy */ + (void) data; + + rc = WEECHAT_CONFIG_OPTION_SET_ERROR; + + if (option_name) + { + ptr_option = weechat_config_search_option (config_file, section, + option_name); + if (ptr_option) + { + if (value) + rc = weechat_config_option_set (ptr_option, value, 1); + else + { + weechat_config_option_free (ptr_option); + rc = WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE; + } + } + else + { + if (value) + { + pos_name = strchr (option_name, '.'); + pos_name = (pos_name) ? pos_name + 1 : option_name; + + ptr_option = weechat_config_new_option ( + config_file, section, + option_name, "integer", + _("buffer used to display message received from IRC " + "server"), + "weechat|current|private", 0, 0, value, value, 0, + NULL, NULL, NULL, NULL, NULL, NULL); + rc = (ptr_option) ? + WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE : WEECHAT_CONFIG_OPTION_SET_ERROR; + } + else + rc = WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE; + } + } + + if (rc == WEECHAT_CONFIG_OPTION_SET_ERROR) + { + weechat_printf (NULL, + _("%s%s: error creating \"%s\" => \"%s\""), + weechat_prefix ("error"), IRC_PLUGIN_NAME, + option_name, value); + } + + return rc; +} + +/* * irc_config_ctcp_create_option: set a ctcp reply format */ @@ -1322,6 +1391,13 @@ irc_config_init () N_("name of bar item where IRC server is displayed (for status bar)"), "buffer_plugin|buffer_name", 0, 0, "buffer_plugin", NULL, 0, NULL, NULL, &irc_config_change_look_item_display_server, NULL, NULL, NULL); + irc_config_look_msgbuffer_fallback = weechat_config_new_option ( + irc_config_file, ptr_section, + "msgbuffer_fallback", "integer", + N_("default target buffer for msgbuffer options when target is " + "private and that private buffer is not found"), + "current|server", 0, 0, "current", NULL, 0, NULL, NULL, + NULL, NULL, NULL, NULL); irc_config_look_raw_messages = weechat_config_new_option ( irc_config_file, ptr_section, "raw_messages", "integer", @@ -1487,6 +1563,20 @@ irc_config_init () NULL, 0, 0, "off", NULL, 0, NULL, NULL, &irc_config_change_network_send_unknown_commands, NULL, NULL, NULL); + /* msgbuffer */ + ptr_section = weechat_config_new_section (irc_config_file, "msgbuffer", + 1, 1, + NULL, NULL, NULL, NULL, + NULL, NULL, + &irc_config_msgbuffer_create_option, NULL, + NULL, NULL); + if (!ptr_section) + { + weechat_config_free (irc_config_file); + return 0; + } + irc_config_section_msgbuffer = ptr_section; + /* CTCP */ ptr_section = weechat_config_new_section (irc_config_file, "ctcp", 1, 1, @@ -1499,7 +1589,6 @@ irc_config_init () weechat_config_free (irc_config_file); return 0; } - irc_config_section_ctcp = ptr_section; /* ignore */ @@ -1526,7 +1615,6 @@ irc_config_init () weechat_config_free (irc_config_file); return 0; } - irc_config_section_server_default = ptr_section; irc_config_server_create_default_options (ptr_section); @@ -1544,7 +1632,6 @@ irc_config_init () weechat_config_free (irc_config_file); return 0; } - irc_config_section_server = ptr_section; hook_config_color_nicks_number = weechat_hook_config ("weechat.look.color_nicks_number", diff --git a/src/plugins/irc/irc-config.h b/src/plugins/irc/irc-config.h index 3b83e18f8..79f5cd11c 100644 --- a/src/plugins/irc/irc-config.h +++ b/src/plugins/irc/irc-config.h @@ -35,6 +35,12 @@ enum t_irc_config_look_item_display_server IRC_CONFIG_LOOK_ITEM_DISPLAY_SERVER_NAME, }; +enum t_irc_config_look_msgbuffer_fallback +{ + IRC_CONFIG_LOOK_MSGBUFFER_FALLBACK_CURRENT = 0, + IRC_CONFIG_LOOK_MSGBUFFER_FALLBACK_SERVER, +}; + enum t_irc_config_look_notice_as_pv { IRC_CONFIG_LOOK_NOTICE_AS_PV_AUTO = 0, @@ -57,6 +63,7 @@ enum t_irc_config_display_away }; extern struct t_config_file *irc_config_file; +extern struct t_config_section *irc_config_section_msgbuffer; extern struct t_config_section *irc_config_section_ctcp; extern struct t_config_section *irc_config_section_server_default; extern struct t_config_section *irc_config_section_server; @@ -76,6 +83,7 @@ extern struct t_config_option *irc_config_look_display_old_topic; extern struct t_config_option *irc_config_look_hide_nickserv_pwd; extern struct t_config_option *irc_config_look_highlight_tags; extern struct t_config_option *irc_config_look_item_display_server; +extern struct t_config_option *irc_config_look_msgbuffer_fallback; extern struct t_config_option *irc_config_look_notice_as_pv; extern struct t_config_option *irc_config_look_raw_messages; extern struct t_config_option *irc_config_look_show_away_once; diff --git a/src/plugins/irc/irc-msgbuffer.c b/src/plugins/irc/irc-msgbuffer.c new file mode 100644 index 000000000..3b9e3af86 --- /dev/null +++ b/src/plugins/irc/irc-msgbuffer.c @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2003-2009 by FlashCode <flashcode@flashtux.org> + * See README for License detail, AUTHORS for developers list. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/* irc-msgbuffer.c: target buffer for IRC messages + (weechat, current, private) */ + + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <sys/time.h> +#include <time.h> +#include <sys/utsname.h> + +#include "../weechat-plugin.h" +#include "irc.h" +#include "irc-msgbuffer.h" +#include "irc-channel.h" +#include "irc-config.h" +#include "irc-server.h" + + +char *irc_msgbuffer_target_string[] = +{ "weechat", "server", "current", "private" }; + + +/* + * irc_msgbuffer_get_string: get string value for target + */ + +const char * +irc_msgbuffer_get_string (int target) +{ + if ((target < 0) || (target >= IRC_MSGBUFFER_NUM_TARGETS)) + return NULL; + + return irc_msgbuffer_target_string[target]; +} + +/* + * irc_msgbuffer_get_option: get pointer to option with IRC message + */ + +struct t_config_option * +irc_msgbuffer_get_option (struct t_irc_server *server, const char *message) +{ + struct t_config_option *ptr_option; + char option_name[512]; + + if (server) + { + snprintf (option_name, sizeof (option_name), + "%s.%s", server->name, message); + + /* search for msgbuffer in config file, for server */ + ptr_option = weechat_config_search_option (irc_config_file, + irc_config_section_msgbuffer, + option_name); + if (ptr_option) + return ptr_option; + } + + /* search for msgbuffer in config file */ + ptr_option = weechat_config_search_option (irc_config_file, + irc_config_section_msgbuffer, + message); + if (ptr_option) + return ptr_option; + + /* no msgbuffer found in config */ + return NULL; +} + + +/* + * irc_msgbuffer_get_target_buffer: get target for IRC message + * message is IRC message + * (for example: "invite", "312") + * alias is optional alias for message + * (for example "whois") + */ + +struct t_gui_buffer * +irc_msgbuffer_get_target_buffer (struct t_irc_server *server, const char *nick, + const char *message, const char *alias) +{ + struct t_config_option *ptr_option; + int target; + struct t_gui_buffer *ptr_buffer; + struct t_irc_channel *ptr_channel; + struct t_weechat_plugin *buffer_plugin; + + ptr_option = irc_msgbuffer_get_option (server, message); + if (!ptr_option && alias && alias[0]) + ptr_option = irc_msgbuffer_get_option (server, alias); + + target = (ptr_option) ? + weechat_config_integer (ptr_option) : -1; + + switch (target) + { + case IRC_MSGBUFFER_TARGET_WEECHAT: + return NULL; + break; + case IRC_MSGBUFFER_TARGET_CURRENT: + break; + case IRC_MSGBUFFER_TARGET_PRIVATE: + ptr_channel = irc_channel_search (server, nick); + if (ptr_channel) + return ptr_channel->buffer; + if (weechat_config_integer (irc_config_look_msgbuffer_fallback) == + IRC_CONFIG_LOOK_MSGBUFFER_FALLBACK_SERVER) + { + return (server) ? server->buffer : NULL; + } + break; + default: + return (server) ? server->buffer : NULL; + break; + } + + ptr_buffer = weechat_current_buffer (); + buffer_plugin = weechat_buffer_get_pointer (ptr_buffer, "plugin"); + if (buffer_plugin == weechat_irc_plugin) + return ptr_buffer; + return (server) ? server->buffer : NULL; +} diff --git a/src/plugins/irc/irc-msgbuffer.h b/src/plugins/irc/irc-msgbuffer.h new file mode 100644 index 000000000..3544edf8e --- /dev/null +++ b/src/plugins/irc/irc-msgbuffer.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2003-2009 by FlashCode <flashcode@flashtux.org> + * See README for License detail, AUTHORS for developers list. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#ifndef __WEECHAT_IRC_MSGBUFFER_H +#define __WEECHAT_IRC_MSGBUFFER_H 1 + +enum t_irc_msgbuffer_target +{ + IRC_MSGBUFFER_TARGET_WEECHAT = 0, + IRC_MSGBUFFER_TARGET_CURRENT, + IRC_MSGBUFFER_TARGET_PRIVATE, + /* number of msgbuffer targets */ + IRC_MSGBUFFER_NUM_TARGETS, +}; + +struct t_irc_server; + +struct t_irc_msgbuffer +{ + char *message; /* IRC message */ + enum t_irc_msgbuffer_target target; /* target buffer */ +}; + +extern const char *irc_msgbuffer_get_string (int target); +extern struct t_gui_buffer *irc_msgbuffer_get_target_buffer (struct t_irc_server *server, + const char *nick, + const char *message, + const char *alias); + +#endif /* irc-msgbuffer.h */ diff --git a/src/plugins/irc/irc-protocol.c b/src/plugins/irc/irc-protocol.c index aa562418f..b059a3414 100644 --- a/src/plugins/irc/irc-protocol.c +++ b/src/plugins/irc/irc-protocol.c @@ -35,15 +35,16 @@ #include "irc.h" #include "irc-protocol.h" #include "irc-buffer.h" +#include "irc-channel.h" #include "irc-color.h" #include "irc-command.h" #include "irc-config.h" #include "irc-ctcp.h" -#include "irc-server.h" -#include "irc-channel.h" -#include "irc-nick.h" -#include "irc-mode.h" #include "irc-ignore.h" +#include "irc-mode.h" +#include "irc-msgbuffer.h" +#include "irc-nick.h" +#include "irc-server.h" /* @@ -289,7 +290,8 @@ irc_protocol_cmd_invite (struct t_irc_server *server, const char *command, if (!irc_ignore_check (server, NULL, nick, host)) { - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, nick, + command, NULL), irc_protocol_tags (command, "notify_highlight"), _("%sYou have been invited to %s%s%s by " "%s%s%s"), @@ -765,6 +767,7 @@ irc_protocol_cmd_notice (struct t_irc_server *server, const char *command, struct t_irc_channel *ptr_channel; struct t_irc_nick *ptr_nick; int notify_private; + struct t_gui_buffer *ptr_buffer; /* NOTICE message looks like: NOTICE AUTH :*** Looking up your hostname... @@ -861,9 +864,11 @@ irc_protocol_cmd_notice (struct t_irc_server *server, const char *command, } else { + ptr_buffer = irc_msgbuffer_get_target_buffer (server, nick, + command, NULL); if (address && address[0]) { - weechat_printf_tags (server->buffer, + weechat_printf_tags (ptr_buffer, irc_protocol_tags (command, (notify_private) ? "notify_private" : NULL), "%s%s%s %s(%s%s%s)%s: %s", @@ -881,7 +886,7 @@ irc_protocol_cmd_notice (struct t_irc_server *server, const char *command, { if (nick && nick[0]) { - weechat_printf_tags (server->buffer, + weechat_printf_tags (ptr_buffer, irc_protocol_tags (command, (notify_private) ? "notify_private" : NULL), "%s%s%s%s: %s", @@ -893,7 +898,7 @@ irc_protocol_cmd_notice (struct t_irc_server *server, const char *command, } else { - weechat_printf_tags (server->buffer, + weechat_printf_tags (ptr_buffer, irc_protocol_tags (command, (notify_private) ? "notify_private" : NULL), "%s%s", @@ -1393,7 +1398,8 @@ irc_protocol_cmd_numeric (struct t_irc_server *server, const char *command, pos_args = (argv_eol[2][0] == ':') ? argv_eol[2] + 1 : argv_eol[2]; } - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, NULL), irc_protocol_tags (command, "irc_numeric"), "%s%s", weechat_prefix ("network"), @@ -1523,7 +1529,8 @@ irc_protocol_cmd_wallops (struct t_irc_server *server, const char *command, if (!irc_ignore_check (server, NULL, nick, host)) { - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, nick, + command, NULL), irc_protocol_tags (command, NULL), _("%sWallops from %s%s %s(%s%s%s)%s: %s"), weechat_prefix ("network"), @@ -1674,7 +1681,8 @@ irc_protocol_cmd_221 (struct t_irc_server *server, const char *command, IRC_PROTOCOL_MIN_ARGS(4); - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, argv[2], + command, NULL), irc_protocol_tags (command, "irc_numeric"), _("%sUser mode for %s%s%s is %s[%s%s%s]"), weechat_prefix ("network"), @@ -1760,7 +1768,8 @@ irc_protocol_cmd_303 (struct t_irc_server *server, const char *command, /* make C compiler happy */ (void) argv; - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, NULL), irc_protocol_tags (command, "irc_numeric"), _("%sUsers online: %s%s"), weechat_prefix ("network"), @@ -1789,7 +1798,8 @@ irc_protocol_cmd_305 (struct t_irc_server *server, const char *command, if (argc > 3) { - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, "unaway"), irc_protocol_tags (command, "irc_numeric"), "%s%s", weechat_prefix ("network"), @@ -1823,7 +1833,8 @@ irc_protocol_cmd_306 (struct t_irc_server *server, const char *command, if (argc > 3) { - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, "away"), irc_protocol_tags (command, "irc_numeric"), "%s%s", weechat_prefix ("network"), @@ -1852,7 +1863,37 @@ irc_protocol_cmd_whois_nick_msg (struct t_irc_server *server, const char *comman IRC_PROTOCOL_MIN_ARGS(5); - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, argv[3], + command, "whois"), + irc_protocol_tags (command, "irc_numeric"), + "%s%s[%s%s%s] %s%s", + weechat_prefix ("network"), + IRC_COLOR_CHAT_DELIMITERS, + IRC_COLOR_CHAT_NICK, + argv[3], + IRC_COLOR_CHAT_DELIMITERS, + IRC_COLOR_CHAT, + (argv_eol[4][0] == ':') ? argv_eol[4] + 1 : argv_eol[4]); + + return WEECHAT_RC_OK; +} + +/* + * irc_protocol_cmd_whowas_nick_msg: a whowas command with nick and message + */ + +int +irc_protocol_cmd_whowas_nick_msg (struct t_irc_server *server, const char *command, + int argc, char **argv, char **argv_eol) +{ + /* messages look like: + :server 369 flashy FlashCode :some text here + */ + + IRC_PROTOCOL_MIN_ARGS(5); + + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, argv[3], + command, "whowas"), irc_protocol_tags (command, "irc_numeric"), "%s%s[%s%s%s] %s%s", weechat_prefix ("network"), @@ -1880,7 +1921,8 @@ irc_protocol_cmd_311 (struct t_irc_server *server, const char *command, IRC_PROTOCOL_MIN_ARGS(8); - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, argv[3], + command, "whois"), irc_protocol_tags (command, "irc_numeric"), "%s%s[%s%s%s] (%s%s@%s%s)%s: %s", weechat_prefix ("network"), @@ -1912,7 +1954,8 @@ irc_protocol_cmd_312 (struct t_irc_server *server, const char *command, IRC_PROTOCOL_MIN_ARGS(6); - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, argv[3], + command, "whois"), irc_protocol_tags (command, "irc_numeric"), "%s%s[%s%s%s] %s%s %s(%s%s%s)", weechat_prefix ("network"), @@ -1944,7 +1987,8 @@ irc_protocol_cmd_314 (struct t_irc_server *server, const char *command, IRC_PROTOCOL_MIN_ARGS(8); - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, argv[3], + command, "whowas"), irc_protocol_tags (command, "irc_numeric"), _("%s%s[%s%s%s] (%s%s@%s%s)%s was %s"), weechat_prefix ("network"), @@ -1985,7 +2029,8 @@ irc_protocol_cmd_315 (struct t_irc_server *server, const char *command, } else { - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, "who"), irc_protocol_tags (command, "irc_numeric"), "%s%s[%s%s%s]%s %s", weechat_prefix ("network"), @@ -2010,6 +2055,7 @@ irc_protocol_cmd_317 (struct t_irc_server *server, const char *command, { int idle_time, day, hour, min, sec; time_t datetime; + struct t_gui_buffer *ptr_buffer; /* 317 message looks like: :server 317 mynick nick 122877 1205327880 :seconds idle, signon time @@ -2028,9 +2074,12 @@ irc_protocol_cmd_317 (struct t_irc_server *server, const char *command, datetime = (time_t)(atol (argv[5])); + ptr_buffer = irc_msgbuffer_get_target_buffer (server, argv[3], + command, "whois"); + if (day > 0) { - weechat_printf_tags (server->buffer, + weechat_printf_tags (ptr_buffer, irc_protocol_tags (command, "irc_numeric"), _("%s%s[%s%s%s]%s idle: %s%d %s%s, " "%s%02d %s%s %s%02d %s%s %s%02d " @@ -2062,7 +2111,7 @@ irc_protocol_cmd_317 (struct t_irc_server *server, const char *command, } else { - weechat_printf_tags (server->buffer, + weechat_printf_tags (ptr_buffer, irc_protocol_tags (command, "irc_numeric"), _("%s%s[%s%s%s]%s idle: %s%02d %s%s " "%s%02d %s%s %s%02d %s%s, " @@ -2111,7 +2160,8 @@ irc_protocol_cmd_321 (struct t_irc_server *server, const char *command, pos_args = (argc > 4) ? ((argv_eol[4][0] == ':') ? argv_eol[4] + 1 : argv_eol[4]) : NULL; - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, "list"), irc_protocol_tags (command, "irc_numeric"), "%s%s%s%s", weechat_prefix ("network"), @@ -2144,7 +2194,8 @@ irc_protocol_cmd_322 (struct t_irc_server *server, const char *command, if (!server->cmd_list_regexp || (regexec (server->cmd_list_regexp, argv[3], 0, NULL, 0) == 0)) { - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, "list"), irc_protocol_tags (command, "irc_numeric"), "%s%s%s%s(%s%s%s)%s%s%s", weechat_prefix ("network"), @@ -2184,7 +2235,8 @@ irc_protocol_cmd_323 (struct t_irc_server *server, const char *command, pos_args = (argc > 3) ? ((argv_eol[3][0] == ':') ? argv_eol[3] + 1 : argv_eol[3]) : NULL; - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, "list"), irc_protocol_tags (command, "irc_numeric"), "%s%s", weechat_prefix ("network"), @@ -2242,16 +2294,20 @@ irc_protocol_cmd_327 (struct t_irc_server *server, const char *command, int argc, char **argv, char **argv_eol) { char *pos_realname; + struct t_gui_buffer *ptr_buffer; /* 327 message looks like: :server 327 mynick nick host ip :real hostname/ip */ - + IRC_PROTOCOL_MIN_ARGS(6); pos_realname = (argc > 6) ? ((argv_eol[6][0] == ':') ? argv_eol[6] + 1 : argv_eol[6]) : NULL; + ptr_buffer = irc_msgbuffer_get_target_buffer (server, argv[3], + command, "whois"); + if (pos_realname && pos_realname[0]) { weechat_printf_tags (server->buffer, @@ -2384,7 +2440,8 @@ irc_protocol_cmd_330 (struct t_irc_server *server, const char *command, IRC_PROTOCOL_MIN_ARGS(6); - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, argv[3], + command, "whois"), irc_protocol_tags (command, "irc_numeric"), "%s%s[%s%s%s] %s%s %s%s", weechat_prefix ("network"), @@ -2549,7 +2606,8 @@ irc_protocol_cmd_338 (struct t_irc_server *server, const char *command, IRC_PROTOCOL_MIN_ARGS(6); - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, argv[3], + command, "whois"), irc_protocol_tags (command, "irc_numeric"), "%s%s[%s%s%s]%s %s %s%s", weechat_prefix ("network"), @@ -2582,7 +2640,8 @@ irc_protocol_cmd_341 (struct t_irc_server *server, const char *command, /* make C compiler happy */ (void) argv_eol; - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, argv[2], + command, NULL), irc_protocol_tags (command, "irc_numeric"), _("%s%s%s%s has invited %s%s%s to %s%s%s"), weechat_prefix ("network"), @@ -2613,7 +2672,8 @@ irc_protocol_cmd_344 (struct t_irc_server *server, const char *command, IRC_PROTOCOL_MIN_ARGS(5); - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, "reop"), irc_protocol_tags (command, "irc_numeric"), _("%sChannel reop %s%s%s: %s%s"), weechat_prefix ("network"), @@ -2640,7 +2700,8 @@ irc_protocol_cmd_345 (struct t_irc_server *server, const char *command, IRC_PROTOCOL_MIN_ARGS(5); - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, "reop"), irc_protocol_tags (command, "irc_numeric"), "%s%s%s%s: %s", weechat_prefix ("network"), @@ -2767,15 +2828,19 @@ int irc_protocol_cmd_351 (struct t_irc_server *server, const char *command, int argc, char **argv, char **argv_eol) { + struct t_gui_buffer *ptr_buffer; + /* 351 message looks like: :server 351 mynick dancer-ircd-1.0.36(2006/07/23_13:11:50). server :iMZ dncrTS/v4 */ IRC_PROTOCOL_MIN_ARGS(5); + ptr_buffer = irc_msgbuffer_get_target_buffer (server, NULL, command, NULL); + if (argc > 5) { - weechat_printf_tags (server->buffer, + weechat_printf_tags (ptr_buffer, irc_protocol_tags (command, "irc_numeric"), "%s%s %s (%s)", weechat_prefix ("network"), @@ -2785,7 +2850,7 @@ irc_protocol_cmd_351 (struct t_irc_server *server, const char *command, } else { - weechat_printf_tags (server->buffer, + weechat_printf_tags (ptr_buffer, irc_protocol_tags (command, "irc_numeric"), "%s%s %s", weechat_prefix ("network"), @@ -2848,7 +2913,8 @@ irc_protocol_cmd_352 (struct t_irc_server *server, const char *command, } else { - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, "who"), irc_protocol_tags (command, "irc_numeric"), "%s%s[%s%s%s] %s%s%s(%s%s@%s%s)%s " "%s%s%s%s(%s)", @@ -3273,11 +3339,15 @@ irc_protocol_cmd_432 (struct t_irc_server *server, const char *command, int argc, char **argv, char **argv_eol) { int i, nick_found, nick_to_use; + struct t_gui_buffer *ptr_buffer; irc_protocol_cmd_error (server, command, argc, argv, argv_eol); if (!server->is_connected) { + ptr_buffer = irc_msgbuffer_get_target_buffer (server, NULL, + command, NULL); + nick_found = -1; nick_to_use = -1; for (i = 0; i < server->nicks_count; i++) @@ -3297,7 +3367,7 @@ irc_protocol_cmd_432 (struct t_irc_server *server, const char *command, } if (nick_to_use < 0) { - weechat_printf (server->buffer, + weechat_printf (ptr_buffer, _("%s%s: all declared nicknames are " "already in use or invalid, closing " "connection with server"), @@ -3307,7 +3377,7 @@ irc_protocol_cmd_432 (struct t_irc_server *server, const char *command, return WEECHAT_RC_OK; } - weechat_printf (server->buffer, + weechat_printf (ptr_buffer, _("%s%s: nickname \"%s\" is invalid, " "trying nickname #%d (\"%s\")"), weechat_prefix ("error"), @@ -3331,9 +3401,13 @@ irc_protocol_cmd_433 (struct t_irc_server *server, const char *command, int argc, char **argv, char **argv_eol) { int i, nick_found, nick_to_use; + struct t_gui_buffer *ptr_buffer; if (!server->is_connected) { + ptr_buffer = irc_msgbuffer_get_target_buffer (server, NULL, + command, NULL); + nick_found = -1; nick_to_use = -1; for (i = 0; i < server->nicks_count; i++) @@ -3353,7 +3427,7 @@ irc_protocol_cmd_433 (struct t_irc_server *server, const char *command, } if (nick_to_use < 0) { - weechat_printf (server->buffer, + weechat_printf (ptr_buffer, _("%s%s: all declared nicknames are " "already in use, closing " "connection with server"), @@ -3363,7 +3437,7 @@ irc_protocol_cmd_433 (struct t_irc_server *server, const char *command, return WEECHAT_RC_OK; } - weechat_printf (server->buffer, + weechat_printf (ptr_buffer, _("%s: nickname \"%s\" is already in use, " "trying nickname #%d (\"%s\")"), IRC_PLUGIN_NAME, server->nick, @@ -3389,15 +3463,20 @@ int irc_protocol_cmd_438 (struct t_irc_server *server, const char *command, int argc, char **argv, char **argv_eol) { + struct t_gui_buffer *ptr_buffer; + /* 438 message looks like: :server 438 mynick newnick :Nick change too fast. Please wait 30 seconds. */ IRC_PROTOCOL_MIN_ARGS(4); + ptr_buffer = irc_msgbuffer_get_target_buffer (server, NULL, + command, NULL); + if (argc >= 5) { - weechat_printf_tags (server->buffer, + weechat_printf_tags (ptr_buffer, irc_protocol_tags (command, "irc_numeric"), "%s%s (%s => %s)", weechat_prefix ("network"), @@ -3407,7 +3486,7 @@ irc_protocol_cmd_438 (struct t_irc_server *server, const char *command, } else { - weechat_printf_tags (server->buffer, + weechat_printf_tags (ptr_buffer, irc_protocol_tags (command, "irc_numeric"), "%s%s %s", weechat_prefix ("network"), @@ -3434,7 +3513,8 @@ irc_protocol_cmd_901 (struct t_irc_server *server, const char *command, if (argc >= 7) { - weechat_printf_tags (server->buffer, + weechat_printf_tags (irc_msgbuffer_get_target_buffer (server, NULL, + command, NULL), irc_protocol_tags (command, "irc_numeric"), "%s%s", weechat_prefix ("network"), @@ -3541,7 +3621,7 @@ irc_protocol_recv_command (struct t_irc_server *server, const char *entire_line, { "366", /* end of /names list */ 1, &irc_protocol_cmd_366 }, { "367", /* banlist */ 1, &irc_protocol_cmd_367 }, { "368", /* end of banlist */ 1, &irc_protocol_cmd_368 }, - { "369", /* whowas (end) */ 1, &irc_protocol_cmd_whois_nick_msg }, + { "369", /* whowas (end) */ 1, &irc_protocol_cmd_whowas_nick_msg }, { "378", /* whois (connecting from) */ 1, &irc_protocol_cmd_whois_nick_msg }, { "379", /* whois (using modes) */ 1, &irc_protocol_cmd_whois_nick_msg }, { "401", /* no such nick/channel */ 1, &irc_protocol_cmd_error }, |