diff --git a/ChangeLog.adoc b/ChangeLog.adoc index dfc0c86db..3d46447aa 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -31,6 +31,7 @@ Bug fixes:: * core: fix evaluation of condition with nested "if" (issue #1434) * irc: case-insensitive comparison on incoming CTCP command, force upper case on CTCP replies (issue #1439) * irc: fix memory leak when the channel topic is changed + * relay: update buffers synchronization when buffers are renamed (issue #1428) * xfer: send signal "xfer_ended" after the received file has been renamed (issue #1438) Build:: diff --git a/src/plugins/relay/weechat/relay-weechat-protocol.c b/src/plugins/relay/weechat/relay-weechat-protocol.c index 82cb6ceb5..1d7452a8d 100644 --- a/src/plugins/relay/weechat/relay-weechat-protocol.c +++ b/src/plugins/relay/weechat/relay-weechat-protocol.c @@ -501,6 +501,8 @@ relay_weechat_protocol_signal_buffer_cb (const void *pointer, void *data, struct t_gui_buffer *ptr_buffer; struct t_relay_weechat_msg *msg; char cmd_hdata[64], str_signal[128]; + const char *ptr_old_full_name; + int *ptr_old_flags, flags; /* make C compiler happy */ (void) data; @@ -640,6 +642,27 @@ relay_weechat_protocol_signal_buffer_cb (const void *pointer, void *data, if (!ptr_buffer) return WEECHAT_RC_OK; + /* rename old buffer name if present in hashtable "buffers_sync" */ + ptr_old_full_name = weechat_buffer_get_string (ptr_buffer, + "old_full_name"); + if (ptr_old_full_name && ptr_old_full_name[0]) + { + ptr_old_flags = weechat_hashtable_get ( + RELAY_WEECHAT_DATA(ptr_client, buffers_sync), + ptr_old_full_name); + if (ptr_old_flags) + { + flags = *ptr_old_flags; + weechat_hashtable_remove ( + RELAY_WEECHAT_DATA(ptr_client, buffers_sync), + ptr_old_full_name); + weechat_hashtable_set ( + RELAY_WEECHAT_DATA(ptr_client, buffers_sync), + weechat_buffer_get_string (ptr_buffer, "full_name"), + &flags); + } + } + /* send signal only if sync with flag "buffers" or "buffer" */ if (relay_weechat_protocol_is_sync (ptr_client, ptr_buffer, RELAY_WEECHAT_PROTOCOL_SYNC_BUFFERS |