summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.adoc1
-rw-r--r--src/plugins/irc/irc-protocol.c49
-rw-r--r--tests/unit/plugins/irc/test-irc-protocol.cpp16
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");
/*