diff options
-rw-r--r-- | ChangeLog.adoc | 1 | ||||
-rw-r--r-- | src/plugins/irc/irc-protocol.c | 49 | ||||
-rw-r--r-- | tests/unit/plugins/irc/test-irc-protocol.cpp | 16 |
3 files changed, 42 insertions, 24 deletions
diff --git a/ChangeLog.adoc b/ChangeLog.adoc index f44178bc0..b2676ac7c 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -59,6 +59,7 @@ Bug fixes:: * fset: remove extra spaces between min and max values when second format is used * fset: fix mouse actions when second format is used * fset: apply option fset.color.help_description (issue #1988) + * irc: don't open a new private buffer on `/msg` command when capability echo-message is enabled (issue #2016) * irc: fix title of private buffers wrongly set to own address when capability echo-message is enabled (issue #2016) * irc: fix unexpected message sent to server when part of the second line of an IRC command (issue #1992) * irc: fix autojoin of channels when private buffers are opened (issue #2012) diff --git a/src/plugins/irc/irc-protocol.c b/src/plugins/irc/irc-protocol.c index 5ebdbf375..4d1c1e41c 100644 --- a/src/plugins/irc/irc-protocol.c +++ b/src/plugins/irc/irc-protocol.c @@ -3264,7 +3264,7 @@ IRC_PROTOCOL_CALLBACK(privmsg) if (strcmp (ptr_channel->name, remote_nick) != 0) irc_channel_pv_rename (server, ptr_channel, remote_nick); } - else + else if (!nick_is_me) { ptr_channel = irc_channel_new (server, IRC_CHANNEL_TYPE_PRIVATE, @@ -3280,7 +3280,8 @@ IRC_PROTOCOL_CALLBACK(privmsg) } } - if (weechat_config_boolean (irc_config_look_typing_status_nicks)) + if (ptr_channel + && weechat_config_boolean (irc_config_look_typing_status_nicks)) { irc_typing_channel_set_nick (ptr_channel, nick, IRC_CHANNEL_TYPING_STATE_OFF); @@ -3294,7 +3295,8 @@ IRC_PROTOCOL_CALLBACK(privmsg) } else { - irc_channel_set_topic (ptr_channel, address); + if (ptr_channel) + irc_channel_set_topic (ptr_channel, address); if (weechat_config_boolean (irc_config_look_color_pv_nick_like_channel)) { color = irc_nick_find_color_name (server, nick); @@ -3328,22 +3330,37 @@ IRC_PROTOCOL_CALLBACK(privmsg) free (str_color); msg_args2 = (nick_is_me) ? irc_message_hide_password (server, remote_nick, msg_args) : NULL; - weechat_printf_date_tags ( - ptr_channel->buffer, - date, - irc_protocol_tags (server, command, tags, str_tags, nick, address), - "%s%s", - irc_nick_as_prefix ( - server, NULL, nick, - (nick_is_me) ? - IRC_COLOR_CHAT_NICK_SELF : irc_nick_color_for_pv (server, - ptr_channel, - nick)), - (msg_args2) ? msg_args2 : msg_args); + if (nick_is_me && !ptr_channel) + { + irc_input_user_message_display ( + server, + date, + remote_nick, + address, + "privmsg", + NULL, /* ctcp_type */ + (msg_args2) ? msg_args2 : msg_args, + 1); /* decode_colors */ + } + else + { + weechat_printf_date_tags ( + (ptr_channel) ? ptr_channel->buffer : server->buffer, + date, + irc_protocol_tags (server, command, tags, str_tags, nick, address), + "%s%s", + irc_nick_as_prefix ( + server, NULL, nick, + (nick_is_me) ? + IRC_COLOR_CHAT_NICK_SELF : irc_nick_color_for_pv (server, + ptr_channel, + nick)), + (msg_args2) ? msg_args2 : msg_args); + } if (msg_args2) free (msg_args2); - if (ptr_channel->has_quit_server) + if (ptr_channel && ptr_channel->has_quit_server) ptr_channel->has_quit_server = 0; (void) weechat_hook_signal_send ("irc_pv", diff --git a/tests/unit/plugins/irc/test-irc-protocol.cpp b/tests/unit/plugins/irc/test-irc-protocol.cpp index 61518b3d1..c9ed785d9 100644 --- a/tests/unit/plugins/irc/test-irc-protocol.cpp +++ b/tests/unit/plugins/irc/test-irc-protocol.cpp @@ -2781,19 +2781,19 @@ TEST(IrcProtocolWithServer, privmsg) * message from self nick in private * (case of bouncer or if echo-message capability is enabled) */ - RECV(":alice!user@host PRIVMSG alice :this is the message "); - CHECK_PV("alice", "alice", "this is the message ", - "irc_privmsg,self_msg,notify_none,no_highlight," - "prefix_nick_white,nick_alice,host_user@host,log1"); + RECV(":alice!user@host PRIVMSG bob2 :this is the message "); + CHECK_SRV("--", "Msg(alice) -> bob2: this is the message ", + "irc_privmsg,self_msg,notify_none,no_highlight," + "nick_alice,host_user@host,log1"); /* * message from self nick in private, with password hidden (nickserv) * (case of bouncer or if echo-message capability is enabled) */ RECV(":alice!user@host PRIVMSG nickserv :identify secret"); - CHECK_PV("nickserv", "alice", "identify ******", - "irc_privmsg,self_msg,notify_none,no_highlight," - "prefix_nick_white,nick_alice,host_user@host,log1"); + CHECK_SRV("--", "Msg(alice) -> nickserv: identify ******", + "irc_privmsg,self_msg,notify_none,no_highlight," + "nick_alice,host_user@host,log1"); /* broken CTCP to channel */ RECV(":bob!user@host PRIVMSG #test :\01"); @@ -2972,7 +2972,7 @@ TEST(IrcProtocolWithServer, privmsg) } else { - CHECK_PV("alice", "--", "CTCP query to alice: CLIENTINFO", + CHECK_SRV("--", "CTCP query to alice: CLIENTINFO", "irc_privmsg,irc_ctcp,self_msg,notify_none,no_highlight," "nick_alice,host_user@host,log1"); /* |