about summary refs log tree commit diff stats
path: root/src/plugins
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2016-07-10 01:28:30 +0100
committerJames Booth <boothj5@gmail.com>2016-07-10 01:28:30 +0100
commit9a0111c10a3bd461c036d6d5ffb0e3390bed47c5 (patch)
tree6c1f75eba19a27e0a8cc3b1228893135785ea4f8 /src/plugins
parent448bef247b076683862e45aee78f06e29938ffc6 (diff)
downloadprofani-tty-9a0111c10a3bd461c036d6d5ffb0e3390bed47c5.tar.gz
Allow reloading all plugins with /plugin reload
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/plugins.c21
-rw-r--r--src/plugins/plugins.h1
2 files changed, 22 insertions, 0 deletions
diff --git a/src/plugins/plugins.c b/src/plugins/plugins.c
index 46fa482f..ef3fc5c2 100644
--- a/src/plugins/plugins.c
+++ b/src/plugins/plugins.c
@@ -187,6 +187,27 @@ plugins_unload(const char *const name)
     return TRUE;
 }
 
+void
+plugins_reload_all(void)
+{
+    GList *plugin_names = g_hash_table_get_keys(plugins);
+    GList *plugin_names_dup = NULL;
+    GList *curr = plugin_names;
+    while (curr) {
+        plugin_names_dup = g_list_append(plugin_names_dup, strdup(curr->data));
+        curr = g_list_next(curr);
+    }
+    g_list_free(plugin_names);
+
+    curr = plugin_names_dup;
+    while (curr) {
+        plugins_reload(curr->data);
+        curr = g_list_next(curr);
+    }
+
+    g_list_free_full(plugin_names_dup, free);
+}
+
 gboolean
 plugins_reload(const char *const name)
 {
diff --git a/src/plugins/plugins.h b/src/plugins/plugins.h
index 45be1fc6..78bae9e6 100644
--- a/src/plugins/plugins.h
+++ b/src/plugins/plugins.h
@@ -108,6 +108,7 @@ void plugins_shutdown(void);
 gboolean plugins_load(const char *const name);
 gboolean plugins_unload(const char *const name);
 gboolean plugins_reload(const char *const name);
+void plugins_reload_all(void);
 
 void plugins_on_start(void);
 void plugins_on_shutdown(void);