summary refs log tree commit diff stats
path: root/src/common/plugin.c
diff options
context:
space:
mode:
authorTingPing <tingping@tingping.se>2013-08-04 04:36:10 -0400
committerTingPing <tingping@tingping.se>2013-08-04 04:36:10 -0400
commite8456beadc9c065b52291ebdc552564d0a1d9069 (patch)
tree4a48b30b0f7e88d67b24c046b7e18370eeaae3d6 /src/common/plugin.c
parentbdc814a4a410610d8aee2211b13a3a86fe477dd3 (diff)
Add reload command for plugins and add to gui
Diffstat (limited to 'src/common/plugin.c')
-rw-r--r--src/common/plugin.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/common/plugin.c b/src/common/plugin.c
index 50157ea1..9ce387c8 100644
--- a/src/common/plugin.c
+++ b/src/common/plugin.c
@@ -512,6 +512,44 @@ plugin_auto_load (session *sess)
 	g_free (sub_dir);
 }
 
+int
+plugin_reload (session *sess, char *name, int by_filename)
+{
+	GSList *list;
+	char *filename;
+	char *ret;
+	hexchat_plugin *pl;
+
+	list = plugin_list;
+	while (list)
+	{
+		pl = list->data;
+		/* static-plugins (plugin-timer.c) have a NULL filename */
+		if ((by_filename && pl->filename && g_ascii_strcasecmp (name, pl->filename) == 0) ||
+			 (by_filename && pl->filename && g_ascii_strcasecmp (name, file_part (pl->filename)) == 0) ||
+			(!by_filename && g_ascii_strcasecmp (name, pl->name) == 0))
+		{
+			/* statically linked plugins have a NULL filename */
+			if (pl->filename != NULL && !pl->fake)
+			{
+				filename = g_strdup (pl->filename);
+				plugin_free (pl, TRUE, FALSE);
+				ret = plugin_load (sess, filename, NULL);
+				g_free (filename);
+				if (ret == NULL)
+					return 1;
+				else
+					return 0;
+			}
+			else
+				return 2;
+		}
+		list = list->next;
+	}
+
+	return 0;
+}
+
 #endif
 
 static GSList *