summaryrefslogtreecommitdiff
path: root/src/plugins/plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/plugin.c')
-rw-r--r--src/plugins/plugin.c133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c
index e96ddc9..cc3db70 100644
--- a/src/plugins/plugin.c
+++ b/src/plugins/plugin.c
@@ -38,6 +38,9 @@
#include "dt.h"
#include "pglist.h"
#include "plugin-int.h"
+#include "../common/extstr.h"
+#include "../common/pathname.h"
+#include "../common/xdg.h"
@@ -56,6 +59,9 @@ static void g_plugin_module_finalize(GPluginModule *);
/* Initialise la classe des greffons d'extension. */
static void g_plugin_module_init_gclass(GPluginModuleClass *, GModule *);
+/* Fournit le nom brut associé au greffon. */
+static char *_g_plugin_module_get_modname(const GPluginModule *);
+
/* Indique le type défini pour un greffon. */
@@ -78,12 +84,17 @@ G_DEFINE_TYPE(GPluginModule, g_plugin_module, G_TYPE_OBJECT);
static void g_plugin_module_class_init(GPluginModuleClass *class)
{
GObjectClass *object; /* Autre version de la classe */
+ GPluginModuleClass *plugin; /* Version parente de la classe*/
object = G_OBJECT_CLASS(class);
object->dispose = (GObjectFinalizeFunc/* ! */)g_plugin_module_dispose;
object->finalize = (GObjectFinalizeFunc)g_plugin_module_finalize;
+ plugin = G_PLUGIN_MODULE_CLASS(class);
+
+ plugin->get_modname = (pg_get_modname_fc)_g_plugin_module_get_modname;
+
}
@@ -712,6 +723,75 @@ static void g_plugin_module_init_gclass(GPluginModuleClass *class, GModule *modu
/******************************************************************************
* *
+* Paramètres : plugin = greffon à valider. *
+* *
+* Description : Fournit le nom brut associé au greffon. *
+* *
+* Retour : Désignation brute du greffon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+char *g_plugin_module_get_modname(const GPluginModule *plugin)
+{
+ char *result; /* Désignation brute à renvoyer*/
+ GPluginModuleClass *class; /* Classe de l'instance active */
+
+ class = G_PLUGIN_MODULE_GET_CLASS(plugin);
+
+ result = class->get_modname(plugin);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : plugin = greffon à valider. *
+* *
+* Description : Fournit le nom brut associé au greffon. *
+* *
+* Retour : Désignation brute du greffon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static char *_g_plugin_module_get_modname(const GPluginModule *plugin)
+{
+ char *result; /* Désignation brute à renvoyer*/
+ char *path; /* Chemin à traiter */
+ char *filename; /* Nom de bibliothèque partagée*/
+ size_t length; /* Taille du nom */
+
+ path = strdup(g_plugin_module_get_filename(G_PLUGIN_MODULE(plugin)));
+
+ filename = basename(path);
+
+ if (strncmp(filename, "lib", 3) == 0)
+ filename += 3;
+
+ length = strlen(filename);
+
+ if (length >= 3)
+ {
+ if (strncmp(&filename[length - 3], ".so", 3) == 0)
+ filename[length - 3] = '\0';
+ }
+
+ result = strdup(filename);
+
+ free(path);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : plugin = greffon à consulter. *
* *
* Description : Indique le fichier contenant le greffon manipulé. *
@@ -981,6 +1061,59 @@ bool g_plugin_module_load(GPluginModule *plugin, GPluginModule **list, size_t co
/******************************************************************************
* *
* Paramètres : plugin = greffon à consulter. *
+* final = fin imposée du nom de fichier final. *
+* create = amorce la création des répertoire ? *
+* *
+* Description : Construit le nom d'un fichier de configuration du greffon. *
+* *
+* Retour : Chemin d'accès déterminé, ou NULL en cas d'erreur. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+char *g_plugin_module_build_config_filename(const GPluginModule *plugin, const char *final, bool create)
+{
+ char *result; /* Chaîne à retourner */
+ char *modname; /* Désignation brute de greffon*/
+ char *suffix; /* Fin du répertoire personnel */
+ bool status; /* Bilan d'une création */
+
+ modname = g_plugin_module_get_modname(plugin);
+
+ suffix = strdup("chrysalide");
+ suffix = stradd(suffix, G_DIR_SEPARATOR_S);
+ suffix = stradd(suffix, "plugins");
+ suffix = stradd(suffix, G_DIR_SEPARATOR_S);
+ suffix = stradd(suffix, modname);
+ suffix = stradd(suffix, G_DIR_SEPARATOR_S);
+ suffix = stradd(suffix, final);
+
+ result = get_xdg_config_dir(suffix);
+
+ free(suffix);
+ free(modname);
+
+ if (create)
+ {
+ status = mkpath(result);
+
+ if (!status)
+ {
+ free(result);
+ result = NULL;
+ }
+
+ }
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : plugin = greffon à consulter. *
* msg = message à faire apparaître à l'écran. *
* *
* Description : Présente dans le journal un message simple. *