about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2019-06-07 12:17:56 +0200
committerGitHub <noreply@github.com>2019-06-07 12:17:56 +0200
commitbee7846ea0b6333aa1f274e61a47596d05c79f6f (patch)
tree1ebc3137a6b0bfe2ba811e962ea1fad9247fece2 /src
parent172436a83f5cae500ce73d7cb00d0cfbd4a84c8d (diff)
parentcc697de0515bb15149983d08a99e8d2ad210bbb5 (diff)
downloadprofani-tty-bee7846ea0b6333aa1f274e61a47596d05c79f6f.tar.gz
Merge pull request #1121 from profanity-im/feature/notify-plugin-fail
Improve plugin load/install failure message
Diffstat (limited to 'src')
-rw-r--r--src/command/cmd_funcs.c12
-rw-r--r--src/plugins/plugins.c31
-rw-r--r--src/plugins/plugins.h4
3 files changed, 31 insertions, 16 deletions
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index f2c9aa1d..9688cb09 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -6912,12 +6912,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;
 }
@@ -6954,12 +6956,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);