From 35660f8b1dc4f96c08111cc49e1b6811037ea6cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Thu, 12 Oct 2023 18:10:22 +0200 Subject: [PATCH] trigger: allow wildcard in command `/trigger` (issue #1956) A mask with wildcards is now allowed in the following commands: - `/trigger enable` - `/trigger disable` - `/trigger toggle` - `/trigger restart` - `/trigger del` - `/trigger restore` --- src/plugins/trigger/trigger-command.c | 168 ++++++++++---------------- 1 file changed, 66 insertions(+), 102 deletions(-) diff --git a/src/plugins/trigger/trigger-command.c b/src/plugins/trigger/trigger-command.c index 2532046ca..4774ef1b2 100644 --- a/src/plugins/trigger/trigger-command.c +++ b/src/plugins/trigger/trigger-command.c @@ -607,12 +607,12 @@ trigger_command_trigger (const void *pointer, void *data, struct t_gui_buffer *buffer, int argc, char **argv, char **argv_eol) { - struct t_trigger *ptr_trigger, *ptr_trigger2; + struct t_trigger *ptr_trigger, *ptr_trigger2, *ptr_next_trigger; struct t_trigger_regex *regex; - char *value, **sargv, **items, *input, str_pos[16]; + char *value, **sargv, **items, *input, str_pos[16], *name; char *arg_arguments, *arg_conditions, *arg_regex, *arg_command; char *arg_return_code, *arg_post_action; - int rc, i, j, type, count, index_option, enable, sargc, num_items, add_rc; + int rc, i, j, type, index_option, enable, sargc, num_items, add_rc; int regex_count, regex_rc; /* make C compiler happy */ @@ -1092,28 +1092,15 @@ trigger_command_trigger (const void *pointer, void *data, enable = 0; else if (weechat_strcmp (argv[1], "restart") == 0) enable = 2; - if (weechat_strcmp (argv[2], "-all") == 0) + for (i = 2; i < argc; i++) { for (ptr_trigger = triggers; ptr_trigger; ptr_trigger = ptr_trigger->next_trigger) { - trigger_command_set_enabled (ptr_trigger, enable, argv[1], 0); - } - } - else - { - for (i = 2; i < argc; i++) - { - ptr_trigger = trigger_search (argv[i]); - if (ptr_trigger) - trigger_command_set_enabled (ptr_trigger, enable, argv[1], - 1); - else + if (weechat_string_match (ptr_trigger->name, argv[i], 1)) { - weechat_printf_date_tags (NULL, 0, "no_trigger", - _("%sTrigger \"%s\" not found"), - weechat_prefix ("error"), - argv[i]); + trigger_command_set_enabled (ptr_trigger, enable, + argv[1], 1); } } } @@ -1125,34 +1112,13 @@ trigger_command_trigger (const void *pointer, void *data, { if (argc < 3) goto error; - if (weechat_strcmp (argv[2], "-all") == 0) + for (i = 2; i < argc; i++) { - count = triggers_count; ptr_trigger = triggers; while (ptr_trigger) { - ptr_trigger2 = ptr_trigger->next_trigger; - if (ptr_trigger->hook_running) - { - trigger_command_error_running (ptr_trigger, argv[1]); - } - else - { - trigger_free (ptr_trigger); - } - ptr_trigger = ptr_trigger2; - } - count = count - triggers_count; - if (count > 0) - weechat_printf_date_tags (NULL, 0, "no_trigger", - _("%d triggers removed"), count); - } - else - { - for (i = 2; i < argc; i++) - { - ptr_trigger = trigger_search (argv[i]); - if (ptr_trigger) + ptr_next_trigger = ptr_trigger->next_trigger; + if (weechat_string_match (ptr_trigger->name, argv[i], 1)) { if (ptr_trigger->hook_running) { @@ -1160,19 +1126,16 @@ trigger_command_trigger (const void *pointer, void *data, } else { + name = strdup (ptr_trigger->name); trigger_free (ptr_trigger); weechat_printf_date_tags (NULL, 0, "no_trigger", _("Trigger \"%s\" removed"), - argv[i]); + name); + if (name) + free (name); } } - else - { - weechat_printf_date_tags (NULL, 0, "no_trigger", - _("%sTrigger \"%s\" not found"), - weechat_prefix ("error"), - argv[i]); - } + ptr_trigger = ptr_next_trigger; } } goto end; @@ -1208,41 +1171,45 @@ trigger_command_trigger (const void *pointer, void *data, { for (j = 0; trigger_config_default_list[j][0]; j++) { - if (strcmp (trigger_config_default_list[j][0], argv[i]) == 0) - break; - } - if (trigger_config_default_list[j][0]) - { - ptr_trigger = trigger_search (argv[i]); - if (ptr_trigger && ptr_trigger->hook_running) + if (weechat_string_match (trigger_config_default_list[j][0], + argv[i], 1)) { - trigger_command_error_running (ptr_trigger, argv[1]); + ptr_trigger = trigger_search (trigger_config_default_list[j][0]); + if (ptr_trigger && ptr_trigger->hook_running) + { + trigger_command_error_running ( + ptr_trigger, trigger_config_default_list[j][0]); + } + else + { + if (ptr_trigger) + trigger_free (ptr_trigger); + ptr_trigger = trigger_new ( + trigger_config_default_list[j][0], /* name */ + trigger_config_default_list[j][1], /* enabled */ + trigger_config_default_list[j][2], /* hook */ + trigger_config_default_list[j][3], /* arguments */ + trigger_config_default_list[j][4], /* conditions */ + trigger_config_default_list[j][5], /* regex */ + trigger_config_default_list[j][6], /* command */ + trigger_config_default_list[j][7], /* return code */ + trigger_config_default_list[j][8]); /* post action */ + if (ptr_trigger) + { + weechat_printf_date_tags ( + NULL, 0, "no_trigger", + _("Trigger \"%s\" restored"), + ptr_trigger->name); + } + else + { + weechat_printf_date_tags ( + NULL, 0, "no_trigger", + _("Failed to restore trigger \"%s\""), + trigger_config_default_list[j][0]); + } + } } - else - { - if (ptr_trigger) - trigger_free (ptr_trigger); - trigger_new ( - trigger_config_default_list[j][0], /* name */ - trigger_config_default_list[j][1], /* enabled */ - trigger_config_default_list[j][2], /* hook */ - trigger_config_default_list[j][3], /* arguments */ - trigger_config_default_list[j][4], /* conditions */ - trigger_config_default_list[j][5], /* regex */ - trigger_config_default_list[j][6], /* command */ - trigger_config_default_list[j][7], /* return code */ - trigger_config_default_list[j][8]); /* post action */ - weechat_printf_date_tags (NULL, 0, "no_trigger", - _("Trigger \"%s\" restored"), - argv[i]); - } - } - else - { - weechat_printf_date_tags ( - NULL, 0, "no_trigger", - _("%sDefault trigger \"%s\" not found"), - weechat_prefix ("error"), argv[i]); } } goto end; @@ -1324,11 +1291,11 @@ trigger_command_init () " || input|output|recreate " " || set