From 101ed2b56a4556aff988eeee5c9b24d7ec14d183 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Fri, 31 May 2024 08:11:55 +0200 Subject: [PATCH] xfer: fix send of data on the DCC chat buffer after `/upgrade` if the buffer was opened before the upgrade (issue #2092) --- ChangeLog.adoc | 3 ++- src/plugins/xfer/xfer-chat.h | 5 +++++ src/plugins/xfer/xfer-upgrade.c | 16 ++++++++++++++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/ChangeLog.adoc b/ChangeLog.adoc index ef8714908..39d875afb 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -15,8 +15,9 @@ For a list of important changes that require manual actions, please look at rele Bug fixes:: - * core, relay: fix include directory of libzstd + * xfer: fix send of data on the DCC chat buffer after `/upgrade` if the buffer was opened before the upgrade (issue #2092) * irc: fix crash in split of IRC message containing a newline if the server is not given + * core, relay: fix include directory of libzstd [[v4.2.2]] == Version 4.2.2 (2024-04-07) diff --git a/src/plugins/xfer/xfer-chat.h b/src/plugins/xfer/xfer-chat.h index 0b4d3dfb9..96dabbd45 100644 --- a/src/plugins/xfer/xfer-chat.h +++ b/src/plugins/xfer/xfer-chat.h @@ -22,6 +22,11 @@ extern void xfer_chat_sendf (struct t_xfer *xfer, const char *format, ...); extern int xfer_chat_recv_cb (const void *pointer, void *data, int fd); +extern int xfer_chat_buffer_input_cb (const void *pointer, void *data, + struct t_gui_buffer *buffer, + const char *input_data); +extern int xfer_chat_buffer_close_cb (const void *pointer, void *data, + struct t_gui_buffer *buffer); extern void xfer_chat_open_buffer (struct t_xfer *xfer); #endif /* WEECHAT_PLUGIN_XFER_CHAT_H */ diff --git a/src/plugins/xfer/xfer-upgrade.c b/src/plugins/xfer/xfer-upgrade.c index 52b4c4d0a..b83438662 100644 --- a/src/plugins/xfer/xfer-upgrade.c +++ b/src/plugins/xfer/xfer-upgrade.c @@ -26,6 +26,7 @@ #include "xfer.h" #include "xfer-upgrade.h" #include "xfer-buffer.h" +#include "xfer-chat.h" /* @@ -80,6 +81,7 @@ xfer_upgrade_set_buffer_callbacks () { struct t_infolist *infolist; struct t_gui_buffer *ptr_buffer; + const char *type; infolist = weechat_infolist_get ("buffer", NULL, NULL); if (infolist) @@ -89,12 +91,22 @@ xfer_upgrade_set_buffer_callbacks () if (weechat_infolist_pointer (infolist, "plugin") == weechat_xfer_plugin) { ptr_buffer = weechat_infolist_pointer (infolist, "pointer"); - weechat_buffer_set_pointer (ptr_buffer, "close_callback", &xfer_buffer_close_cb); - weechat_buffer_set_pointer (ptr_buffer, "input_callback", &xfer_buffer_input_cb); + type = weechat_buffer_get_string (ptr_buffer, "localvar_type"); if (strcmp (weechat_infolist_string (infolist, "name"), XFER_BUFFER_NAME) == 0) { xfer_buffer = ptr_buffer; + weechat_buffer_set_pointer ( + ptr_buffer, "close_callback", &xfer_buffer_close_cb); + weechat_buffer_set_pointer ( + ptr_buffer, "input_callback", &xfer_buffer_input_cb); + } + else if (type && (strcmp (type, "private") == 0)) + { + weechat_buffer_set_pointer ( + ptr_buffer, "close_callback", &xfer_chat_buffer_close_cb); + weechat_buffer_set_pointer ( + ptr_buffer, "input_callback", &xfer_chat_buffer_input_cb); } } }