[rygel] Passive loading of plugins



commit 43e15c1b3d50aad28eb27d08e6d5e70fb06b5368
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date:   Mon May 4 19:22:57 2009 +0300

    Passive loading of plugins
    
    Dynamic modules can now register their plugins on the fly.
---
 src/plugins/dvb/rygel-dvb-plugin.vala             |    4 ++--
 src/plugins/folder/rygel-folder-plugin.vala       |    4 ++--
 src/plugins/mediathek/rygel-mediathek-plugin.vala |    4 ++--
 src/plugins/test/rygel-test-plugin.vala           |    4 ++--
 src/plugins/tracker/rygel-tracker-plugin.vala     |    4 ++--
 src/rygel/rygel-plugin-loader.vala                |   17 +++++++++--------
 6 files changed, 19 insertions(+), 18 deletions(-)

diff --git a/src/plugins/dvb/rygel-dvb-plugin.vala b/src/plugins/dvb/rygel-dvb-plugin.vala
index e72c9cf..194b9d7 100644
--- a/src/plugins/dvb/rygel-dvb-plugin.vala
+++ b/src/plugins/dvb/rygel-dvb-plugin.vala
@@ -29,7 +29,7 @@ using Gee;
 using CStuff;
 
 [ModuleInit]
-public Plugin load_plugin () {
+public void load_plugin (PluginLoader loader) {
     Plugin plugin = new Plugin ("DVB");
 
     // We only implement a ContentDirectory service
@@ -40,6 +40,6 @@ public Plugin load_plugin () {
 
     plugin.add_resource (resource_info);
 
-    return plugin;
+    loader.add_plugin (plugin);
 }
 
diff --git a/src/plugins/folder/rygel-folder-plugin.vala b/src/plugins/folder/rygel-folder-plugin.vala
index 8b65ad1..9ffec3c 100644
--- a/src/plugins/folder/rygel-folder-plugin.vala
+++ b/src/plugins/folder/rygel-folder-plugin.vala
@@ -35,7 +35,7 @@ using GLib;
  * * no monitoring
  */
 [ModuleInit]
-public Plugin load_plugin() {
+public void load_plugin (PluginLoader loader) {
     Plugin plugin = new Plugin ("Folder");
 
     var resource_info = new ResourceInfo (ContentDirectory.UPNP_ID,
@@ -45,7 +45,7 @@ public Plugin load_plugin() {
 
     plugin.add_resource (resource_info);
 
-    return plugin;
+    loader.add_plugin (plugin);
 }
 
 public class Rygel.FolderContentDir : ContentDirectory {
diff --git a/src/plugins/mediathek/rygel-mediathek-plugin.vala b/src/plugins/mediathek/rygel-mediathek-plugin.vala
index ee83072..5e13c97 100644
--- a/src/plugins/mediathek/rygel-mediathek-plugin.vala
+++ b/src/plugins/mediathek/rygel-mediathek-plugin.vala
@@ -24,7 +24,7 @@ using Rygel;
 using GUPnP;
 
 [ModuleInit]
-public Plugin load_plugin () {
+public void load_plugin (PluginLoader loader) {
     Plugin plugin = new Plugin ("ZDFMediathek");
 
     var resource_info = new ResourceInfo (ContentDirectory.UPNP_ID,
@@ -34,7 +34,7 @@ public Plugin load_plugin () {
 
     plugin.add_resource (resource_info);
 
-    return plugin;
+    loader.add_plugin (plugin);
 }
 
 public class Rygel.MediathekContentDir : ContentDirectory {
diff --git a/src/plugins/test/rygel-test-plugin.vala b/src/plugins/test/rygel-test-plugin.vala
index 1ec9aee..d75f9a8 100644
--- a/src/plugins/test/rygel-test-plugin.vala
+++ b/src/plugins/test/rygel-test-plugin.vala
@@ -27,7 +27,7 @@ using Gee;
 using CStuff;
 
 [ModuleInit]
-public Plugin load_plugin () {
+public void load_plugin (PluginLoader loader) {
     Plugin plugin = new Plugin ("Test");
 
     // We only implement a ContentDirectory service
@@ -38,6 +38,6 @@ public Plugin load_plugin () {
 
     plugin.add_resource (resource_info);
 
-    return plugin;
+    loader.add_plugin (plugin);
 }
 
diff --git a/src/plugins/tracker/rygel-tracker-plugin.vala b/src/plugins/tracker/rygel-tracker-plugin.vala
index 05072b1..0ca8923 100644
--- a/src/plugins/tracker/rygel-tracker-plugin.vala
+++ b/src/plugins/tracker/rygel-tracker-plugin.vala
@@ -25,7 +25,7 @@ using Gee;
 using CStuff;
 
 [ModuleInit]
-public Plugin load_plugin () {
+public void load_plugin (PluginLoader loader) {
     Plugin plugin = new Plugin ("Tracker");
 
     // We only implement a ContentDirectory service
@@ -45,6 +45,6 @@ public Plugin load_plugin () {
 
     plugin.add_icon (icon_info);
 
-    return plugin;
+    loader.add_plugin (plugin);
 }
 
diff --git a/src/rygel/rygel-plugin-loader.vala b/src/rygel/rygel-plugin-loader.vala
index 4b280ad..f151fbe 100644
--- a/src/rygel/rygel-plugin-loader.vala
+++ b/src/rygel/rygel-plugin-loader.vala
@@ -30,7 +30,7 @@ using GUPnP;
  * calls it and expects a Plugin instance in return.
  */
 public class Rygel.PluginLoader : Object {
-    private delegate Plugin LoadPluginFunc ();
+    private delegate void LoadPluginFunc (PluginLoader loader);
 
     // Signals
     public signal void plugin_available (Plugin plugin);
@@ -45,6 +45,10 @@ public class Rygel.PluginLoader : Object {
         this.load_plugins_from_dir (dir);
     }
 
+    public void add_plugin (Plugin plugin) {
+        this.plugin_available (plugin);
+    }
+
     private void load_plugins_from_dir (File dir) {
         string attributes = FILE_ATTRIBUTE_STANDARD_NAME + "," +
                             FILE_ATTRIBUTE_STANDARD_TYPE + "," +
@@ -132,15 +136,12 @@ public class Rygel.PluginLoader : Object {
             return;
         }
 
-        debug ("Loaded plugin: '%s'\n", module.name());
+        // We don't want our modules to ever unload
+        module.make_resident ();
 
-        Plugin plugin = load_plugin ();
-        if (plugin != null) {
-            // We don't want our modules to ever unload
-            module.make_resident ();
+        load_plugin (this);
 
-            this.plugin_available (plugin);
-        }
+        debug ("Loaded plugin source: '%s'\n", module.name());
     }
 
     private static bool is_dir (File file) {



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