Added purple_plugins_save_loaded() and purple_plugins_load_saved() soc.2013.gobjectification.plugins

Tue, 30 Jul 2013 03:54:02 +0530

author
Ankit Vani <a@nevitus.org>
date
Tue, 30 Jul 2013 03:54:02 +0530
branch
soc.2013.gobjectification.plugins
changeset 36377
28ec73fbb37d
parent 36376
64870de1db58
child 36378
d51a8507f4e0

Added purple_plugins_save_loaded() and purple_plugins_load_saved()

libpurple/plugins.c file | annotate | diff | comparison | revisions
libpurple/plugins.h file | annotate | diff | comparison | revisions
--- a/libpurple/plugins.c	Mon Jul 29 21:02:48 2013 +0530
+++ b/libpurple/plugins.c	Tue Jul 30 03:54:02 2013 +0530
@@ -245,6 +245,54 @@
 }
 
 void
+purple_plugins_save_loaded(const char *key)
+{
+	GList *pl;
+	GList *ids = NULL;
+
+	for (pl = purple_plugins_get_loaded(); pl != NULL; pl = pl->next) {
+		GPluginPlugin *plugin = GPLUGIN_PLUGIN(pl->data);
+		GPluginPluginInfo *plugin_info = gplugin_plugin_get_info(plugin);
+
+		ids = g_list_append(ids, (gchar *)gplugin_plugin_info_get_id(plugin_info));
+	}
+
+	purple_prefs_set_string_list(key, ids);
+	g_list_free(ids);
+}
+
+void
+purple_plugins_load_saved(const char *key)
+{
+	GList *l, *ids;
+
+	g_return_if_fail(key != NULL);
+
+	ids = purple_prefs_get_string_list(key);
+
+	for (l = ids; l; l = l->next)
+	{
+		char *id;
+		GPluginPlugin *plugin;
+
+		if (l->data == NULL)
+			continue;
+
+		id = l->data;
+		plugin = gplugin_plugin_manager_find_plugin(id);
+
+		if (plugin) {
+			purple_debug_info("plugins", "Loading saved plugin %s\n", id);
+			purple_plugin_load(plugin);
+		} else {
+			purple_debug_error("plugins", "Unable to find saved plugin %s\n", id);
+		}
+	}
+
+	g_list_free_full(ids, (GDestroyNotify)g_free);
+}
+
+void
 purple_plugins_unload_all(void)
 {
 	while (loaded_plugins != NULL)
--- a/libpurple/plugins.h	Mon Jul 29 21:02:48 2013 +0530
+++ b/libpurple/plugins.h	Tue Jul 30 03:54:02 2013 +0530
@@ -137,6 +137,21 @@
 GList *purple_plugins_get_loaded(void);
 
 /**
+ * Saves the list of loaded plugins to the specified preference key
+ *
+ * @param key The preference key to save the list of plugins to.
+ */
+void purple_plugins_save_loaded(const char *key);
+
+/**
+ * Attempts to load all the plugins in the specified preference key
+ * that were loaded when purple last quit.
+ *
+ * @param key The preference key containing the list of plugins.
+ */
+void purple_plugins_load_saved(const char *key);
+
+/**
  * Unloads all loaded plugins.
  */
 void purple_plugins_unload_all(void);

mercurial