[nautilus] module: Keep a list of currently installed modules



commit 5d5b67319a1a36acfcd2a0558303bba6a2bfc662
Author: Corey Berla <corey berla me>
Date:   Mon Jul 18 14:54:00 2022 -0700

    module: Keep a list of currently installed modules

 src/nautilus-module.c | 17 +++++++++++++++--
 src/nautilus-module.h |  1 +
 2 files changed, 16 insertions(+), 2 deletions(-)
---
diff --git a/src/nautilus-module.c b/src/nautilus-module.c
index 4bb46ee64..cd889ff18 100644
--- a/src/nautilus-module.c
+++ b/src/nautilus-module.c
@@ -56,6 +56,7 @@ struct _NautilusModuleClass
 };
 
 static GList *module_objects = NULL;
+static GStrv installed_module_names = NULL;
 
 static GType nautilus_module_get_type (void);
 
@@ -187,7 +188,8 @@ add_module_objects (NautilusModule *module)
 }
 
 static NautilusModule *
-nautilus_module_load_file (const char *filename)
+nautilus_module_load_file (const char   *filename,
+                           GStrvBuilder *installed_module_name_builder)
 {
     NautilusModule *module;
 
@@ -198,6 +200,7 @@ nautilus_module_load_file (const char *filename)
     {
         add_module_objects (module);
         g_type_module_unuse (G_TYPE_MODULE (module));
+        g_strv_builder_add (installed_module_name_builder, filename);
         return module;
     }
     else
@@ -207,11 +210,18 @@ nautilus_module_load_file (const char *filename)
     }
 }
 
+char *
+nautilus_module_get_installed_module_names ()
+{
+    return g_strjoinv ("\n", installed_module_names);
+}
+
 static void
 load_module_dir (const char *dirname)
 {
     GDir *dir;
 
+    g_autoptr (GStrvBuilder) installed_module_name_builder = g_strv_builder_new ();
     dir = g_dir_open (dirname, 0, NULL);
 
     if (dir)
@@ -227,13 +237,15 @@ load_module_dir (const char *dirname)
                 filename = g_build_filename (dirname,
                                              name,
                                              NULL);
-                nautilus_module_load_file (filename);
+                nautilus_module_load_file (filename, installed_module_name_builder);
                 g_free (filename);
             }
         }
 
         g_dir_close (dir);
     }
+
+    installed_module_names = g_strv_builder_end (installed_module_name_builder);
 }
 
 static void
@@ -248,6 +260,7 @@ free_module_objects (void)
     }
 
     g_list_free (module_objects);
+    g_strfreev (installed_module_names);
 }
 
 void
diff --git a/src/nautilus-module.h b/src/nautilus-module.h
index 1f70a9195..dc9191872 100644
--- a/src/nautilus-module.h
+++ b/src/nautilus-module.h
@@ -29,6 +29,7 @@ G_BEGIN_DECLS
 void   nautilus_module_setup                   (void);
 GList *nautilus_module_get_extensions_for_type (GType  type);
 void   nautilus_module_extension_list_free     (GList *list);
+gchar *nautilus_module_get_installed_module_names (void);
 
 
 /* Add a type to the module interface - allows nautilus to add its own modules


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]