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:
+78
-74
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user