1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-30 06:46:38 +02:00

irc: rename server options "default_msg_*" to "msg_*", evaluate them

This commit is contained in:
Sébastien Helleu
2016-07-17 09:29:14 +02:00
parent 8743a88c3b
commit 34ccf3fd81
26 changed files with 700 additions and 394 deletions
+69 -74
View File
@@ -1469,8 +1469,8 @@ IRC_COMMAND_CALLBACK(ctcp)
IRC_COMMAND_CALLBACK(cycle)
{
char *channel_name, *pos_args, *buf;
const char *version, *ptr_arg, *msg_part;
char *channel_name, *pos_args, *msg;
const char *ptr_arg;
char **channels;
int i, num_channels;
@@ -1545,24 +1545,24 @@ IRC_COMMAND_CALLBACK(cycle)
ptr_channel->cycle = 1;
}
msg_part = IRC_SERVER_OPTION_STRING(ptr_server,
IRC_SERVER_OPTION_DEFAULT_MSG_PART);
ptr_arg = (pos_args) ? pos_args :
((msg_part && msg_part[0]) ? msg_part : NULL);
if (ptr_arg)
msg = NULL;
ptr_arg = (pos_args) ?
pos_args : IRC_SERVER_OPTION_STRING(ptr_server,
IRC_SERVER_OPTION_MSG_PART);
if (ptr_arg && ptr_arg[0])
{
version = weechat_info_get ("version", "");
buf = weechat_string_replace (ptr_arg, "%v", (version) ? version : "");
msg = irc_server_get_default_msg (ptr_arg, ptr_server, channel_name);
irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL,
"PART %s :%s", channel_name,
(buf) ? buf : ptr_arg);
if (buf)
free (buf);
"PART %s :%s", channel_name, msg);
}
else
{
irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL,
"PART %s", channel_name);
}
if (msg)
free (msg);
return WEECHAT_RC_OK;
}
@@ -1817,29 +1817,28 @@ IRC_COMMAND_CALLBACK(die)
void
irc_command_quit_server (struct t_irc_server *server, const char *arguments)
{
const char *ptr_arg, *version, *msg_quit;
char *buf;
const char *ptr_arg;
char *msg;
if (!server || !server->is_connected)
return;
msg_quit = IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_DEFAULT_MSG_QUIT);
ptr_arg = (arguments) ? arguments :
((msg_quit && msg_quit[0]) ? msg_quit : NULL);
if (ptr_arg)
msg = NULL;
ptr_arg = (arguments) ?
arguments : IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_MSG_QUIT);
if (ptr_arg && ptr_arg[0])
{
version = weechat_info_get ("version", "");
buf = weechat_string_replace (ptr_arg, "%v",
(version) ? version : "");
irc_server_sendf (server, 0, NULL, "QUIT :%s",
(buf) ? buf : ptr_arg);
if (buf)
free (buf);
msg = irc_server_get_default_msg (ptr_arg, server, NULL);
irc_server_sendf (server, 0, NULL, "QUIT :%s", msg);
}
else
{
irc_server_sendf (server, 0, NULL, "QUIT");
}
if (msg)
free (msg);
}
/*
@@ -2539,23 +2538,19 @@ irc_command_kick_channel (struct t_irc_server *server,
const char *channel_name, const char *nick_name,
const char *message)
{
const char *msg_kick;
char *msg_vars_replaced;
const char *ptr_msg;
char *msg;
msg_kick = (message && message[0]) ?
msg = NULL;
ptr_msg = (message && message[0]) ?
message : IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_DEFAULT_MSG_KICK);
if (msg_kick && msg_kick[0])
IRC_SERVER_OPTION_MSG_KICK);
if (ptr_msg && ptr_msg[0])
{
msg_vars_replaced = irc_message_replace_vars (server,
channel_name,
msg_kick);
msg = irc_server_get_default_msg (ptr_msg, server, channel_name);
irc_server_sendf (server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL,
"KICK %s %s :%s",
channel_name, nick_name,
(msg_vars_replaced) ? msg_vars_replaced : msg_kick);
if (msg_vars_replaced)
free (msg_vars_replaced);
channel_name, nick_name, msg);
}
else
{
@@ -2563,6 +2558,9 @@ irc_command_kick_channel (struct t_irc_server *server,
"KICK %s %s",
channel_name, nick_name);
}
if (msg)
free (msg);
}
/*
@@ -3715,30 +3713,27 @@ void
irc_command_part_channel (struct t_irc_server *server, const char *channel_name,
const char *part_message)
{
const char *ptr_arg, *version, *msg_part;
char *buf;
const char *ptr_arg;
char *msg;
msg_part = IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_DEFAULT_MSG_PART);
ptr_arg = (part_message) ? part_message :
((msg_part && msg_part[0]) ? msg_part : NULL);
if (ptr_arg)
msg = NULL;
ptr_arg = (part_message) ?
part_message : IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_MSG_PART);
if (ptr_arg && ptr_arg[0])
{
version = weechat_info_get ("version", "");
buf = weechat_string_replace (ptr_arg, "%v", (version) ? version : "");
msg = irc_server_get_default_msg (ptr_arg, server, channel_name);
irc_server_sendf (server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL,
"PART %s :%s",
channel_name,
(buf) ? buf : ptr_arg);
if (buf)
free (buf);
"PART %s :%s", channel_name, msg);
}
else
{
irc_server_sendf (server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL,
"PART %s", channel_name);
}
if (msg)
free (msg);
}
/*
@@ -4825,30 +4820,30 @@ irc_command_display_server (struct t_irc_server *server, int with_detail)
weechat_printf (NULL, " away_check_max_nicks : %s%d",
IRC_COLOR_CHAT_VALUE,
weechat_config_integer (server->options[IRC_SERVER_OPTION_AWAY_CHECK_MAX_NICKS]));
/* default_msg_kick */
if (weechat_config_option_is_null (server->options[IRC_SERVER_OPTION_DEFAULT_MSG_KICK]))
weechat_printf (NULL, " default_msg_kick . . : ('%s')",
IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_DEFAULT_MSG_KICK));
/* msg_kick */
if (weechat_config_option_is_null (server->options[IRC_SERVER_OPTION_MSG_KICK]))
weechat_printf (NULL, " msg_kick . . . . . . : ('%s')",
IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_MSG_KICK));
else
weechat_printf (NULL, " default_msg_kick . . : %s'%s'",
weechat_printf (NULL, " msg_kick . . . . . . : %s'%s'",
IRC_COLOR_CHAT_VALUE,
weechat_config_string (server->options[IRC_SERVER_OPTION_DEFAULT_MSG_KICK]));
/* default_msg_part */
if (weechat_config_option_is_null (server->options[IRC_SERVER_OPTION_DEFAULT_MSG_PART]))
weechat_printf (NULL, " default_msg_part . . : ('%s')",
IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_DEFAULT_MSG_PART));
weechat_config_string (server->options[IRC_SERVER_OPTION_MSG_KICK]));
/* msg_part */
if (weechat_config_option_is_null (server->options[IRC_SERVER_OPTION_MSG_PART]))
weechat_printf (NULL, " msg_part . . . . . . : ('%s')",
IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_MSG_PART));
else
weechat_printf (NULL, " default_msg_part . . : %s'%s'",
weechat_printf (NULL, " msg_part . . . . . . : %s'%s'",
IRC_COLOR_CHAT_VALUE,
weechat_config_string (server->options[IRC_SERVER_OPTION_DEFAULT_MSG_PART]));
/* default_msg_quit */
if (weechat_config_option_is_null (server->options[IRC_SERVER_OPTION_DEFAULT_MSG_QUIT]))
weechat_printf (NULL, " default_msg_quit . . : ('%s')",
IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_DEFAULT_MSG_QUIT));
weechat_config_string (server->options[IRC_SERVER_OPTION_MSG_PART]));
/* msg_quit */
if (weechat_config_option_is_null (server->options[IRC_SERVER_OPTION_MSG_QUIT]))
weechat_printf (NULL, " msg_quit . . . . . . : ('%s')",
IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_MSG_QUIT));
else
weechat_printf (NULL, " default_msg_quit . . : %s'%s'",
weechat_printf (NULL, " msg_quit . . . . . . : %s'%s'",
IRC_COLOR_CHAT_VALUE,
weechat_config_string (server->options[IRC_SERVER_OPTION_DEFAULT_MSG_QUIT]));
weechat_config_string (server->options[IRC_SERVER_OPTION_MSG_QUIT]));
/* notify */
if (weechat_config_option_is_null (server->options[IRC_SERVER_OPTION_NOTIFY]))
weechat_printf (NULL, " notify . . . . . . . : ('%s')",
+2 -2
View File
@@ -605,7 +605,7 @@ irc_completion_msg_kick_cb (const void *pointer, void *data,
if (ptr_server)
{
msg_kick = IRC_SERVER_OPTION_STRING(ptr_server,
IRC_SERVER_OPTION_DEFAULT_MSG_KICK);
IRC_SERVER_OPTION_MSG_KICK);
if (msg_kick && msg_kick[0])
{
weechat_hook_completion_list_add (completion, msg_kick,
@@ -638,7 +638,7 @@ irc_completion_msg_part_cb (const void *pointer, void *data,
if (ptr_server)
{
msg_part = IRC_SERVER_OPTION_STRING(ptr_server,
IRC_SERVER_OPTION_DEFAULT_MSG_PART);
IRC_SERVER_OPTION_MSG_PART);
if (msg_part && msg_part[0])
{
weechat_hook_completion_list_add (completion, msg_part,
+17 -9
View File
@@ -2148,13 +2148,15 @@ irc_config_server_new_option (struct t_config_file *config_file,
callback_change_data,
NULL, NULL, NULL);
break;
case IRC_SERVER_OPTION_DEFAULT_MSG_KICK:
case IRC_SERVER_OPTION_MSG_KICK:
new_option = weechat_config_new_option (
config_file, section,
option_name, "string",
N_("default kick message used by commands \"/kick\" and "
"\"/kickban\" (special variables $nick, $channel and $server "
"are replaced by their value)"),
"\"/kickban\" "
"(note: content is evaluated, see /help eval; special "
"variables ${nick}, ${channel} and ${server} are replaced "
"by their value)"),
NULL, 0, 0,
default_value, value,
null_value_allowed,
@@ -2166,12 +2168,15 @@ irc_config_server_new_option (struct t_config_file *config_file,
callback_change_data,
NULL, NULL, NULL);
break;
case IRC_SERVER_OPTION_DEFAULT_MSG_PART:
case IRC_SERVER_OPTION_MSG_PART:
new_option = weechat_config_new_option (
config_file, section,
option_name, "string",
N_("default part message (leaving channel) (\"%v\" will be "
"replaced by WeeChat version in string)"),
N_("default part message (leaving channel) "
"(note: content is evaluated, see /help eval; special "
"variables ${nick}, ${channel} and ${server} are replaced "
"by their value; \"%v\" is replaced by WeeChat version if "
"there is no ${...} in string)"),
NULL, 0, 0,
default_value, value,
null_value_allowed,
@@ -2183,12 +2188,15 @@ irc_config_server_new_option (struct t_config_file *config_file,
callback_change_data,
NULL, NULL, NULL);
break;
case IRC_SERVER_OPTION_DEFAULT_MSG_QUIT:
case IRC_SERVER_OPTION_MSG_QUIT:
new_option = weechat_config_new_option (
config_file, section,
option_name, "string",
N_("default quit message (disconnecting from server) (\"%v\" "
"will be replaced by WeeChat version in string)"),
N_("default quit message (disconnecting from server) "
"(note: content is evaluated, see /help eval; special "
"variables ${nick}, ${channel} and ${server} are replaced "
"by their value; \"%v\" is replaced by WeeChat version if "
"there is no ${...} in string)"),
NULL, 0, 0,
default_value, value,
null_value_allowed,
+112 -63
View File
@@ -75,45 +75,45 @@ char *irc_server_sasl_fail_string[IRC_SERVER_NUM_SASL_FAIL] =
{ "continue", "reconnect", "disconnect" };
char *irc_server_options[IRC_SERVER_NUM_OPTIONS][2] =
{ { "addresses", "" },
{ "proxy", "" },
{ "ipv6", "on" },
{ "ssl", "off" },
{ "ssl_cert", "" },
{ "ssl_priorities", "NORMAL:-VERS-SSL3.0" },
{ "ssl_dhkey_size", "2048" },
{ "ssl_fingerprint", "" },
{ "ssl_verify", "on" },
{ "password", "" },
{ "capabilities", "" },
{ "sasl_mechanism", "plain" },
{ "sasl_username", "" },
{ "sasl_password", "" },
{ "sasl_key", "", },
{ "sasl_timeout", "15" },
{ "sasl_fail", "continue" },
{ "autoconnect", "off" },
{ "autoreconnect", "on" },
{ "autoreconnect_delay", "10" },
{ "nicks", "" },
{ "nicks_alternate", "on" },
{ "username", "" },
{ "realname", "" },
{ "local_hostname", "" },
{ "command", "" },
{ "command_delay", "0" },
{ "autojoin", "" },
{ "autorejoin", "off" },
{ "autorejoin_delay", "30" },
{ "connection_timeout", "60" },
{ "anti_flood_prio_high", "2" },
{ "anti_flood_prio_low", "2" },
{ "away_check", "0" },
{ "away_check_max_nicks", "25" },
{ "default_msg_kick", "" },
{ "default_msg_part", "WeeChat %v" },
{ "default_msg_quit", "WeeChat %v" },
{ "notify", "" },
{ { "addresses", "" },
{ "proxy", "" },
{ "ipv6", "on" },
{ "ssl", "off" },
{ "ssl_cert", "" },
{ "ssl_priorities", "NORMAL:-VERS-SSL3.0" },
{ "ssl_dhkey_size", "2048" },
{ "ssl_fingerprint", "" },
{ "ssl_verify", "on" },
{ "password", "" },
{ "capabilities", "" },
{ "sasl_mechanism", "plain" },
{ "sasl_username", "" },
{ "sasl_password", "" },
{ "sasl_key", "", },
{ "sasl_timeout", "15" },
{ "sasl_fail", "continue" },
{ "autoconnect", "off" },
{ "autoreconnect", "on" },
{ "autoreconnect_delay", "10" },
{ "nicks", "" },
{ "nicks_alternate", "on" },
{ "username", "" },
{ "realname", "" },
{ "local_hostname", "" },
{ "command", "" },
{ "command_delay", "0" },
{ "autojoin", "" },
{ "autorejoin", "off" },
{ "autorejoin_delay", "30" },
{ "connection_timeout", "60" },
{ "anti_flood_prio_high", "2" },
{ "anti_flood_prio_low", "2" },
{ "away_check", "0" },
{ "away_check_max_nicks", "25" },
{ "msg_kick", "" },
{ "msg_part", "WeeChat ${info:version}" },
{ "msg_quit", "WeeChat ${info:version}" },
{ "notify", "" },
};
char *irc_server_casemapping_string[IRC_SERVER_NUM_CASEMAPPING] =
@@ -949,6 +949,55 @@ irc_server_prefix_char_statusmsg (struct t_irc_server *server,
1 : 0;
}
/*
* Gets an evaluated default_msg server option: replaces "%v" by WeeChat
* version if there's no ${...} in string, or just evaluates the string.
*
* Note: result must be freed after use.
*/
char *
irc_server_get_default_msg (const char *default_msg,
struct t_irc_server *server,
const char *channel_name)
{
const char *version;
struct t_hashtable *extra_vars;
char *msg;
/*
* "%v" for version is deprecated since WeeChat 1.6, where
* an expression ${info:version} is preferred, so we replace
* the "%v" with version only if there's no "${...}" in string
*/
if (strstr (default_msg, "%v") && !strstr (default_msg, "${"))
{
version = weechat_info_get ("version", "");
return weechat_string_replace (default_msg, "%v",
(version) ? version : "");
}
extra_vars = weechat_hashtable_new (32,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_POINTER,
NULL,
NULL);
if (extra_vars)
{
weechat_hashtable_set (extra_vars, "server", server->name);
weechat_hashtable_set (extra_vars, "channel",
(channel_name) ? channel_name : "");
weechat_hashtable_set (extra_vars, "nick", server->nick);
}
msg = weechat_string_eval_expression (default_msg, NULL, extra_vars, NULL);
if (extra_vars)
weechat_hashtable_free (extra_vars);
return msg;
}
/*
* Allocates a new server and adds it to the servers queue.
*
@@ -5492,14 +5541,14 @@ irc_server_add_to_infolist (struct t_infolist *infolist,
if (!weechat_infolist_new_var_integer (ptr_item, "away_check_max_nicks",
IRC_SERVER_OPTION_INTEGER(server, IRC_SERVER_OPTION_AWAY_CHECK_MAX_NICKS)))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "default_msg_kick",
IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_DEFAULT_MSG_KICK)))
if (!weechat_infolist_new_var_string (ptr_item, "msg_kick",
IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_MSG_KICK)))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "default_msg_part",
IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_DEFAULT_MSG_PART)))
if (!weechat_infolist_new_var_string (ptr_item, "msg_part",
IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_MSG_PART)))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "default_msg_quit",
IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_DEFAULT_MSG_QUIT)))
if (!weechat_infolist_new_var_string (ptr_item, "msg_quit",
IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_MSG_QUIT)))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "temp_server", server->temp_server))
return 0;
@@ -5851,27 +5900,27 @@ irc_server_print_log ()
else
weechat_log_printf (" away_check_max_nicks : %d",
weechat_config_integer (ptr_server->options[IRC_SERVER_OPTION_AWAY_CHECK_MAX_NICKS]));
/* default_msg_kick */
if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_DEFAULT_MSG_KICK]))
weechat_log_printf (" default_msg_kick . . : null ('%s')",
IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_DEFAULT_MSG_KICK));
/* msg_kick */
if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_MSG_KICK]))
weechat_log_printf (" msg_kick . . . . . . : null ('%s')",
IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_MSG_KICK));
else
weechat_log_printf (" default_msg_kick . . : '%s'",
weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_DEFAULT_MSG_KICK]));
/* default_msg_part */
if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_DEFAULT_MSG_PART]))
weechat_log_printf (" default_msg_part . . : null ('%s')",
IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_DEFAULT_MSG_PART));
weechat_log_printf (" msg_kick . . . . . . : '%s'",
weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_MSG_KICK]));
/* msg_part */
if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_MSG_PART]))
weechat_log_printf (" msg_part . . . . . . : null ('%s')",
IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_MSG_PART));
else
weechat_log_printf (" default_msg_part . . : '%s'",
weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_DEFAULT_MSG_PART]));
/* default_msg_quit */
if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_DEFAULT_MSG_QUIT]))
weechat_log_printf (" default_msg_quit . . : null ('%s')",
IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_DEFAULT_MSG_QUIT));
weechat_log_printf (" msg_part . . . . . . : '%s'",
weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_MSG_PART]));
/* msg_quit */
if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_MSG_QUIT]))
weechat_log_printf (" msg_quit . . . . . . : null ('%s')",
IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_MSG_QUIT));
else
weechat_log_printf (" default_msg_quit . . : '%s'",
weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_DEFAULT_MSG_QUIT]));
weechat_log_printf (" msg_quit . . . . . . : '%s'",
weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_MSG_QUIT]));
/* other server variables */
weechat_log_printf (" temp_server. . . . . : %d", ptr_server->temp_server);
weechat_log_printf (" reloading_from_config: %d", ptr_server->reloaded_from_config);
+6 -3
View File
@@ -78,9 +78,9 @@ enum t_irc_server_option
IRC_SERVER_OPTION_ANTI_FLOOD_PRIO_LOW, /* anti-flood (low priority) */
IRC_SERVER_OPTION_AWAY_CHECK, /* delay between away checks */
IRC_SERVER_OPTION_AWAY_CHECK_MAX_NICKS, /* max nicks for away check */
IRC_SERVER_OPTION_DEFAULT_MSG_KICK, /* default kick message */
IRC_SERVER_OPTION_DEFAULT_MSG_PART, /* default part message */
IRC_SERVER_OPTION_DEFAULT_MSG_QUIT, /* default quit message */
IRC_SERVER_OPTION_MSG_KICK, /* default kick message */
IRC_SERVER_OPTION_MSG_PART, /* default part message */
IRC_SERVER_OPTION_MSG_QUIT, /* default quit message */
IRC_SERVER_OPTION_NOTIFY, /* notify list */
/* number of server options */
IRC_SERVER_NUM_OPTIONS,
@@ -300,6 +300,9 @@ extern char irc_server_get_prefix_char_for_mode (struct t_irc_server *server,
extern const char *irc_server_get_chanmodes (struct t_irc_server *server);
extern int irc_server_prefix_char_statusmsg (struct t_irc_server *server,
char prefix_char);
extern char *irc_server_get_default_msg (const char *default_msg,
struct t_irc_server *server,
const char *channel_name);
extern struct t_irc_server *irc_server_alloc (const char *name);
extern struct t_irc_server *irc_server_alloc_with_url (const char *irc_url);
extern void irc_server_apply_command_line_options (struct t_irc_server *server,