1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Allow loading all plugins

This commit is contained in:
James Booth 2017-02-05 19:16:14 +00:00
parent a9fab9ed2d
commit dd42c3de6a
3 changed files with 45 additions and 6 deletions

View File

@ -6264,9 +6264,21 @@ gboolean
cmd_plugins_load(ProfWin *window, const char *const command, gchar **args)
{
if (args[1] == NULL) {
cons_bad_cmd_usage(command);
GSList *loaded = plugins_load_all();
if (loaded) {
cons_show("Loaded plugins:");
GSList *curr = loaded;
while (curr) {
cons_show(" %s", curr->data);
curr = g_slist_next(curr);
}
g_slist_free_full(loaded, g_free);
} else {
cons_show("No plugins loaded.");
}
return TRUE;
}
gboolean res = plugins_load(args[1]);
if (res) {
cons_show("Loaded plugin: %s", args[1]);
@ -6281,8 +6293,12 @@ gboolean
cmd_plugins_unload(ProfWin *window, const char *const command, gchar **args)
{
if (args[1] == NULL) {
plugins_unload_all();
cons_show("Unloaded all plugins");
gboolean res = plugins_unload_all();
if (res) {
cons_show("Unloaded all plugins.");
} else {
cons_show("No plugins unloaded.");
}
return TRUE;
}

View File

@ -153,6 +153,23 @@ plugins_install(const char *const plugin_name, const char *const filename)
return result;
}
GSList*
plugins_load_all(void)
{
GSList *plugins = plugins_unloaded_list();
GSList *loaded = NULL;
GSList *curr = plugins;
while (curr) {
if (plugins_load(curr->data)) {
loaded = g_slist_append(loaded, strdup(curr->data));
}
curr = g_slist_next(curr);
}
g_slist_free_full(plugins, g_free);
return loaded;
}
gboolean
plugins_load(const char *const name)
{
@ -190,9 +207,10 @@ plugins_load(const char *const name)
}
}
void
gboolean
plugins_unload_all(void)
{
gboolean result = FALSE;
GList *plugin_names = g_hash_table_get_keys(plugins);
GList *plugin_names_dup = NULL;
GList *curr = plugin_names;
@ -204,11 +222,15 @@ plugins_unload_all(void)
curr = plugin_names_dup;
while (curr) {
plugins_unload(curr->data);
if (plugins_unload(curr->data)) {
result = TRUE;
}
curr = g_list_next(curr);
}
g_list_free_full(plugin_names_dup, free);
return result;
}
gboolean

View File

@ -109,8 +109,9 @@ void plugins_shutdown(void);
gboolean plugins_install(const char *const plugin_name, const char *const filename);
gboolean plugins_load(const char *const name);
GSList* plugins_load_all(void);
gboolean plugins_unload(const char *const name);
void plugins_unload_all(void);
gboolean plugins_unload_all(void);
gboolean plugins_reload(const char *const name);
void plugins_reload_all(void);