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

script: fix autoload of multiple scripts at once with /script autoload (closes #2018)

This commit is contained in:
Sébastien Helleu
2023-09-20 20:05:49 +02:00
parent 91bb1ebf5d
commit 12106ae7ba
2 changed files with 79 additions and 74 deletions
+78 -74
View File
@@ -1217,7 +1217,7 @@ plugin_script_action_install (struct t_weechat_plugin *weechat_plugin,
char **list)
{
char **argv, *name, *ptr_base_name, *base_name, *new_path, *autoload_path;
char *symlink_path, str_signal[128], *ptr_list, *weechat_data_dir, *dir_separator;
char *symlink_path, str_signal[128], *ptr_name, *weechat_data_dir, *dir_separator;
int argc, i, length, rc, autoload, existing_script, script_loaded;
struct t_plugin_script *ptr_script;
@@ -1227,30 +1227,7 @@ plugin_script_action_install (struct t_weechat_plugin *weechat_plugin,
/* create again directories, just in case they have been removed */
plugin_script_create_dirs (weechat_plugin);
ptr_list = *list;
autoload = 0;
*quiet = 0;
while ((ptr_list[0] == ' ') || (ptr_list[0] == '-'))
{
if (ptr_list[0] == ' ')
ptr_list++;
else
{
switch (ptr_list[1])
{
case 'a': /* autoload */
autoload = 1;
break;
case 'q': /* quiet mode */
*quiet = 1;
break;
}
ptr_list += 2;
}
}
argv = weechat_string_split (ptr_list, ",", NULL,
argv = weechat_string_split (*list, ",", NULL,
WEECHAT_STRING_SPLIT_STRIP_LEFT
| WEECHAT_STRING_SPLIT_STRIP_RIGHT
| WEECHAT_STRING_SPLIT_COLLAPSE_SEPS,
@@ -1259,7 +1236,30 @@ plugin_script_action_install (struct t_weechat_plugin *weechat_plugin,
{
for (i = 0; i < argc; i++)
{
name = strdup (argv[i]);
autoload = 0;
*quiet = 0;
ptr_name = argv[i];
while ((ptr_name[0] == ' ') || (ptr_name[0] == '-'))
{
if (ptr_name[0] == ' ')
{
ptr_name++;
}
else
{
switch (ptr_name[1])
{
case 'a': /* autoload */
autoload = 1;
break;
case 'q': /* quiet mode */
*quiet = 1;
break;
}
ptr_name += 2;
}
}
name = strdup (ptr_name);
if (name)
{
ptr_base_name = basename (name);
@@ -1351,6 +1351,13 @@ plugin_script_action_install (struct t_weechat_plugin *weechat_plugin,
free (base_name);
if (weechat_data_dir)
free (weechat_data_dir);
/* send signal */
snprintf (str_signal, sizeof (str_signal),
"%s_script_installed", weechat_plugin->name);
(void) weechat_hook_signal_send (str_signal,
WEECHAT_HOOK_SIGNAL_STRING,
name);
}
free (name);
}
@@ -1360,11 +1367,6 @@ plugin_script_action_install (struct t_weechat_plugin *weechat_plugin,
*quiet = 0;
snprintf (str_signal, sizeof (str_signal),
"%s_script_installed", weechat_plugin->name);
(void) weechat_hook_signal_send (str_signal, WEECHAT_HOOK_SIGNAL_STRING,
ptr_list);
free (*list);
*list = NULL;
}
@@ -1384,7 +1386,7 @@ plugin_script_action_remove (struct t_weechat_plugin *weechat_plugin,
int *quiet,
char **list)
{
char **argv, str_signal[128], *ptr_list;
char **argv, str_signal[128], *ptr_name;
int argc, i;
struct t_plugin_script *ptr_script;
@@ -1394,15 +1396,7 @@ plugin_script_action_remove (struct t_weechat_plugin *weechat_plugin,
/* create again directories, just in case they have been removed */
plugin_script_create_dirs (weechat_plugin);
ptr_list = *list;
*quiet = 0;
if (strncmp (ptr_list, "-q ", 3) == 0)
{
*quiet = 1;
ptr_list += 3;
}
argv = weechat_string_split (ptr_list, ",", NULL,
argv = weechat_string_split (*list, ",", NULL,
WEECHAT_STRING_SPLIT_STRIP_LEFT
| WEECHAT_STRING_SPLIT_STRIP_RIGHT
| WEECHAT_STRING_SPLIT_COLLAPSE_SEPS,
@@ -1411,25 +1405,35 @@ plugin_script_action_remove (struct t_weechat_plugin *weechat_plugin,
{
for (i = 0; i < argc; i++)
{
ptr_name = argv[i];
*quiet = 0;
if (strncmp (ptr_name, "-q ", 3) == 0)
{
*quiet = 1;
ptr_name += 3;
}
/* unload script, if script is loaded */
ptr_script = plugin_script_search_by_full_name (scripts, argv[i]);
ptr_script = plugin_script_search_by_full_name (scripts, ptr_name);
if (ptr_script)
(*script_unload) (ptr_script);
/* remove script file(s) */
(void) plugin_script_remove_file (weechat_plugin, argv[i],
(void) plugin_script_remove_file (weechat_plugin, ptr_name,
*quiet, 1);
/* send signal */
snprintf (str_signal, sizeof (str_signal),
"%s_script_removed", weechat_plugin->name);
(void) weechat_hook_signal_send (str_signal,
WEECHAT_HOOK_SIGNAL_STRING,
ptr_name);
}
weechat_string_free_split (argv);
}
*quiet = 0;
snprintf (str_signal, sizeof (str_signal),
"%s_script_removed", weechat_plugin->name);
(void) weechat_hook_signal_send (str_signal, WEECHAT_HOOK_SIGNAL_STRING,
ptr_list);
free (*list);
*list = NULL;
}
@@ -1444,7 +1448,7 @@ plugin_script_action_autoload (struct t_weechat_plugin *weechat_plugin,
char **list)
{
char **argv, *name, *ptr_base_name, *base_name, *autoload_path;
char *symlink_path, *ptr_list, *weechat_data_dir, *dir_separator;
char *symlink_path, *ptr_name, *weechat_data_dir, *dir_separator;
int argc, i, length, rc, autoload;
if (!*list)
@@ -1453,30 +1457,7 @@ plugin_script_action_autoload (struct t_weechat_plugin *weechat_plugin,
/* create again directories, just in case they have been removed */
plugin_script_create_dirs (weechat_plugin);
ptr_list = *list;
autoload = 0;
*quiet = 0;
while ((ptr_list[0] == ' ') || (ptr_list[0] == '-'))
{
if (ptr_list[0] == ' ')
ptr_list++;
else
{
switch (ptr_list[1])
{
case 'a': /* no autoload */
autoload = 1;
break;
case 'q': /* quiet mode */
*quiet = 1;
break;
}
ptr_list += 2;
}
}
argv = weechat_string_split (ptr_list, ",", NULL,
argv = weechat_string_split (*list, ",", NULL,
WEECHAT_STRING_SPLIT_STRIP_LEFT
| WEECHAT_STRING_SPLIT_STRIP_RIGHT
| WEECHAT_STRING_SPLIT_COLLAPSE_SEPS,
@@ -1485,7 +1466,30 @@ plugin_script_action_autoload (struct t_weechat_plugin *weechat_plugin,
{
for (i = 0; i < argc; i++)
{
name = strdup (argv[i]);
ptr_name = argv[i];
autoload = 0;
*quiet = 0;
while ((ptr_name[0] == ' ') || (ptr_name[0] == '-'))
{
if (ptr_name[0] == ' ')
{
ptr_name++;
}
else
{
switch (ptr_name[1])
{
case 'a': /* no autoload */
autoload = 1;
break;
case 'q': /* quiet mode */
*quiet = 1;
break;
}
ptr_name += 2;
}
}
name = strdup (ptr_name);
if (name)
{
ptr_base_name = basename (name);