diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 999afd10..ae3bda0b 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -6904,12 +6904,14 @@ cmd_plugins_load(ProfWin *window, const char *const command, gchar **args) return TRUE; } - gboolean res = plugins_load(args[1]); + GString* error_message = g_string_new(NULL); + gboolean res = plugins_load(args[1], error_message); if (res) { cons_show("Loaded plugin: %s", args[1]); } else { - cons_show("Failed to load plugin: %s", args[1]); + cons_show("Failed to load plugin: %s. %s", args[1], error_message->str); } + g_string_free(error_message, TRUE); return TRUE; } @@ -6946,12 +6948,14 @@ cmd_plugins_reload(ProfWin *window, const char *const command, gchar **args) return TRUE; } - gboolean res = plugins_reload(args[1]); + GString* error_message = g_string_new(NULL); + gboolean res = plugins_reload(args[1], error_message); if (res) { cons_show("Reloaded plugin: %s", args[1]); } else { - cons_show("Failed to reload plugin: %s", args[1]); + cons_show("Failed to reload plugin: %s, %s", args[1], error_message); } + g_string_free(error_message, TRUE); return TRUE; } diff --git a/src/plugins/plugins.c b/src/plugins/plugins.c index 4d109886..19d57c44 100644 --- a/src/plugins/plugins.c +++ b/src/plugins/plugins.c @@ -208,7 +208,7 @@ plugins_install(const char *const plugin_name, const char *const filename, GStri g_string_free(target_path, TRUE); if (result) { - result = plugins_load(plugin_name); + result = plugins_load(plugin_name, error_message); } return result; } @@ -219,11 +219,14 @@ plugins_load_all(void) GSList *plugins = plugins_unloaded_list(); GSList *loaded = NULL; GSList *curr = plugins; + GString *error_message = NULL; while (curr) { - if (plugins_load(curr->data)) { + error_message = g_string_new(NULL); + if (plugins_load(curr->data, error_message)) { loaded = g_slist_append(loaded, strdup(curr->data)); } curr = g_slist_next(curr); + g_string_free(error_message, TRUE); } g_slist_free_full(plugins, g_free); @@ -231,7 +234,7 @@ plugins_load_all(void) } gboolean -plugins_load(const char *const name) +plugins_load(const char *const name, GString *error_message) { ProfPlugin *plugin = g_hash_table_lookup(plugins, name); if (plugin) { @@ -239,16 +242,21 @@ plugins_load(const char *const name) return FALSE; } -#ifdef HAVE_PYTHON if (g_str_has_suffix(name, ".py")) { +#ifdef HAVE_PYTHON plugin = python_plugin_create(name); - } +#else + g_string_assign(error_message, "Python plugins support is disabled."); #endif -#ifdef HAVE_C + } + if (g_str_has_suffix(name, ".so")) { +#ifdef HAVE_C plugin = c_plugin_create(name); - } +#else + g_string_assign(error_message, "C plugins support is disabled."); #endif + } if (plugin) { g_hash_table_insert(plugins, strdup(name), plugin); if (connection_get_status() == JABBER_CONNECTED) { @@ -336,9 +344,12 @@ plugins_reload_all(void) } g_list_free(plugin_names); + GString *error_message = NULL; curr = plugin_names_dup; while (curr) { - plugins_reload(curr->data); + error_message = g_string_new(NULL); + plugins_reload(curr->data, error_message); + g_string_free(error_message, TRUE); curr = g_list_next(curr); } @@ -346,11 +357,11 @@ plugins_reload_all(void) } gboolean -plugins_reload(const char *const name) +plugins_reload(const char *const name, GString *error_message) { gboolean res = plugins_unload(name); if (res) { - res = plugins_load(name); + res = plugins_load(name, error_message); } return res; diff --git a/src/plugins/plugins.h b/src/plugins/plugins.h index 4267cb22..8b373cfe 100644 --- a/src/plugins/plugins.h +++ b/src/plugins/plugins.h @@ -118,11 +118,11 @@ gboolean plugins_install(const char *const plugin_name, const char *const filena gboolean plugins_uninstall(const char *const plugin_name); gboolean plugins_update(const char *const plugin_name, const char *const filename, GString * error_message); PluginsInstallResult* plugins_install_all(const char *const path); -gboolean plugins_load(const char *const name); +gboolean plugins_load(const char *const name, GString *error_message); GSList* plugins_load_all(void); gboolean plugins_unload(const char *const name); gboolean plugins_unload_all(void); -gboolean plugins_reload(const char *const name); +gboolean plugins_reload(const char *const name, GString *error_message); void plugins_reload_all(void); void plugins_on_start(void);