1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-04 08:43:13 +02:00

New "close callback" for buffers, use of this callback in IRC plugin to leave channel or disconnect from server when buffer is closed

This commit is contained in:
Sebastien Helleu
2008-02-01 18:56:12 +01:00
parent d15c1956b5
commit 184700e597
23 changed files with 442 additions and 194 deletions
+31 -20
View File
@@ -2102,6 +2102,35 @@ irc_command_oper (void *data, struct t_gui_buffer *buffer, int argc,
return WEECHAT_RC_OK;
}
/*
* irc_command_part_channel: send a part message for a channel
*/
void
irc_command_part_channel (struct t_irc_server *server, char *channel_name,
char *part_message)
{
char *ptr_arg, *buf, *version;
ptr_arg = (part_message) ? part_message :
(weechat_config_string (irc_config_irc_default_msg_part)
&& weechat_config_string (irc_config_irc_default_msg_part)[0]) ?
weechat_config_string (irc_config_irc_default_msg_part) : NULL;
if (ptr_arg)
{
version = weechat_info_get ("version");
buf = weechat_string_replace (ptr_arg, "%v", (version) ? version : "");
irc_server_sendf (server, "PART %s :%s",
channel_name,
(buf) ? buf : ptr_arg);
if (buf)
free (buf);
}
else
irc_server_sendf (server, "PART %s", channel_name);
}
/*
* irc_command_part: leave a channel or close a private window
*/
@@ -2110,7 +2139,7 @@ int
irc_command_part (void *data, struct t_gui_buffer *buffer, int argc,
char **argv, char **argv_eol)
{
char *channel_name, *pos_args, *ptr_arg, *buf, *version;
char *channel_name, *pos_args;
IRC_GET_SERVER_CHANNEL(buffer);
if (!ptr_server || !ptr_server->is_connected)
@@ -2157,31 +2186,13 @@ irc_command_part (void *data, struct t_gui_buffer *buffer, int argc,
weechat_buffer_close (ptr_channel->buffer, 1);
ptr_channel->buffer = NULL;
irc_channel_free (ptr_server, ptr_channel);
//gui_status_draw (gui_current_window->buffer, 1);
//gui_input_draw (gui_current_window->buffer, 1);
return WEECHAT_RC_OK;
}
channel_name = ptr_channel->name;
pos_args = NULL;
}
ptr_arg = (pos_args) ? pos_args :
(weechat_config_string (irc_config_irc_default_msg_part)
&& weechat_config_string (irc_config_irc_default_msg_part)[0]) ?
weechat_config_string (irc_config_irc_default_msg_part) : NULL;
if (ptr_arg)
{
version = weechat_info_get ("version");
buf = weechat_string_replace (ptr_arg, "%v", (version) ? version : "");
irc_server_sendf (ptr_server, "PART %s :%s",
channel_name,
(buf) ? buf : ptr_arg);
if (buf)
free (buf);
}
else
irc_server_sendf (ptr_server, "PART %s", channel_name);
irc_command_part_channel (ptr_server, channel_name, pos_args);
return WEECHAT_RC_OK;
}