1
1
mirror of https://github.com/profanity-im/profanity.git synced 2025-02-02 15:08:15 -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) cmd_plugins_load(ProfWin *window, const char *const command, gchar **args)
{ {
if (args[1] == NULL) { 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; return TRUE;
} }
gboolean res = plugins_load(args[1]); gboolean res = plugins_load(args[1]);
if (res) { if (res) {
cons_show("Loaded plugin: %s", args[1]); cons_show("Loaded plugin: %s", args[1]);
@ -6281,8 +6293,12 @@ gboolean
cmd_plugins_unload(ProfWin *window, const char *const command, gchar **args) cmd_plugins_unload(ProfWin *window, const char *const command, gchar **args)
{ {
if (args[1] == NULL) { if (args[1] == NULL) {
plugins_unload_all(); gboolean res = plugins_unload_all();
cons_show("Unloaded all plugins"); if (res) {
cons_show("Unloaded all plugins.");
} else {
cons_show("No plugins unloaded.");
}
return TRUE; return TRUE;
} }

View File

@ -153,6 +153,23 @@ plugins_install(const char *const plugin_name, const char *const filename)
return result; 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 gboolean
plugins_load(const char *const name) plugins_load(const char *const name)
{ {
@ -190,9 +207,10 @@ plugins_load(const char *const name)
} }
} }
void gboolean
plugins_unload_all(void) plugins_unload_all(void)
{ {
gboolean result = FALSE;
GList *plugin_names = g_hash_table_get_keys(plugins); GList *plugin_names = g_hash_table_get_keys(plugins);
GList *plugin_names_dup = NULL; GList *plugin_names_dup = NULL;
GList *curr = plugin_names; GList *curr = plugin_names;
@ -204,11 +222,15 @@ plugins_unload_all(void)
curr = plugin_names_dup; curr = plugin_names_dup;
while (curr) { while (curr) {
plugins_unload(curr->data); if (plugins_unload(curr->data)) {
result = TRUE;
}
curr = g_list_next(curr); curr = g_list_next(curr);
} }
g_list_free_full(plugin_names_dup, free); g_list_free_full(plugin_names_dup, free);
return result;
} }
gboolean 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_install(const char *const plugin_name, const char *const filename);
gboolean plugins_load(const char *const name); gboolean plugins_load(const char *const name);
GSList* plugins_load_all(void);
gboolean plugins_unload(const char *const name); gboolean plugins_unload(const char *const name);
void plugins_unload_all(void); gboolean plugins_unload_all(void);
gboolean plugins_reload(const char *const name); gboolean plugins_reload(const char *const name);
void plugins_reload_all(void); void plugins_reload_all(void);