diff options
Diffstat (limited to 'src/plugins/plugins.c')
-rw-r--r-- | src/plugins/plugins.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/plugins/plugins.c b/src/plugins/plugins.c index e2d0bdf3..cb222a32 100644 --- a/src/plugins/plugins.c +++ b/src/plugins/plugins.c @@ -114,7 +114,7 @@ plugins_init(void) GSList *curr = plugins; while (curr) { ProfPlugin *plugin = curr->data; - plugin->init_func(plugin, PACKAGE_VERSION, PACKAGE_STATUS); + plugin->init_func(plugin, PACKAGE_VERSION, PACKAGE_STATUS, NULL, NULL); curr = g_slist_next(curr); } } @@ -155,7 +155,13 @@ plugins_load(const char *const name) #endif if (plugin) { plugins = g_slist_append(plugins, plugin); - plugin->init_func(plugin, PACKAGE_VERSION, PACKAGE_STATUS); + if (jabber_get_connection_status() == JABBER_CONNECTED) { + const char *account_name = jabber_get_account_name(); + const char *fulljid = jabber_get_fulljid(); + plugin->init_func(plugin, PACKAGE_VERSION, PACKAGE_STATUS, account_name, fulljid); + } else { + plugin->init_func(plugin, PACKAGE_VERSION, PACKAGE_STATUS, NULL, NULL); + } log_info("Loaded plugin: %s", name); return TRUE; } else { @@ -181,29 +187,30 @@ _get_plugins_dir(void) } void -_plugins_list_dir(const gchar *const dir, GSList **result) +_plugins_unloaded_list_dir(const gchar *const dir, GSList **result) { - GDir *plugins = g_dir_open(dir, 0, NULL); - if (plugins == NULL) { + GDir *plugins_dir = g_dir_open(dir, 0, NULL); + if (plugins_dir == NULL) { return; } - const gchar *plugin = g_dir_read_name(plugins); + const gchar *plugin = g_dir_read_name(plugins_dir); while (plugin) { - if (g_str_has_suffix(plugin, ".so") || g_str_has_suffix(plugin, ".py")) { + GSList *found = g_slist_find_custom(plugins, plugin, (GCompareFunc)_find_by_name); + if ((g_str_has_suffix(plugin, ".so") || g_str_has_suffix(plugin, ".py")) && !found) { *result = g_slist_append(*result, strdup(plugin)); } - plugin = g_dir_read_name(plugins); + plugin = g_dir_read_name(plugins_dir); } - g_dir_close(plugins); + g_dir_close(plugins_dir); } GSList* -plugins_file_list(void) +plugins_unloaded_list(void) { GSList *result = NULL; char *plugins_dir = _get_plugins_dir(); - _plugins_list_dir(plugins_dir, &result); + _plugins_unloaded_list_dir(plugins_dir, &result); free(plugins_dir); return result; |