[rygel] core,plugins: Don't create disabled plugin



commit f70d5de22829c346836045f520557c66267064b2
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date:   Wed Jan 19 00:56:39 2011 +0200

    core,plugins: Don't create disabled plugin
    
    Now its the responsibility of module to make sure if the plugin its about
    to create/add is disabled by the user.

 .../external/rygel-external-plugin-factory.vala    |    6 ++++
 .../gst-launch/rygel-gst-launch-plugin.vala        |    7 ++++
 .../media-export/rygel-media-export-plugin.vala    |    6 ++++
 src/plugins/mediathek/rygel-mediathek-plugin.vala  |    7 ++++
 src/plugins/mpris/rygel-mpris-plugin-factory.vala  |    6 ++++
 src/plugins/playbin/rygel-playbin-plugin.vala      |    7 ++++
 src/plugins/test/rygel-test-plugin.vala            |    7 ++++
 .../tracker/rygel-tracker-plugin-factory.vala      |    7 ++++
 src/rygel/rygel-plugin-loader.vala                 |   32 ++++++++++++-------
 9 files changed, 73 insertions(+), 12 deletions(-)
---
diff --git a/src/plugins/external/rygel-external-plugin-factory.vala b/src/plugins/external/rygel-external-plugin-factory.vala
index fe315c4..b56faf8 100644
--- a/src/plugins/external/rygel-external-plugin-factory.vala
+++ b/src/plugins/external/rygel-external-plugin-factory.vala
@@ -116,6 +116,12 @@ public class Rygel.External.PluginFactory {
     }
 
     private async void load_plugin (string service_name) throws IOError {
+        if (this.loader.plugin_disabled (service_name)) {
+            message ("Plugin '%s' disabled by user, ignoring..", service_name);
+
+            return;
+        }
+
         if (service_name.has_prefix (GRILO_UPNP_PREFIX)) {
             // We don't entertain UPnP sources
             return;
diff --git a/src/plugins/gst-launch/rygel-gst-launch-plugin.vala b/src/plugins/gst-launch/rygel-gst-launch-plugin.vala
index 636e890..70a72e5 100644
--- a/src/plugins/gst-launch/rygel-gst-launch-plugin.vala
+++ b/src/plugins/gst-launch/rygel-gst-launch-plugin.vala
@@ -24,6 +24,13 @@ using Rygel;
 using Gee;
 
 public void module_init (PluginLoader loader) {
+    if (loader.plugin_disabled (GstLaunch.Plugin.NAME)) {
+        message ("Plugin '%s' disabled by user, ignoring..",
+                 GstLaunch.Plugin.NAME);
+
+        return;
+    }
+
     var plugin = new GstLaunch.Plugin ();
 
     loader.add_plugin (plugin);
diff --git a/src/plugins/media-export/rygel-media-export-plugin.vala b/src/plugins/media-export/rygel-media-export-plugin.vala
index 956c807..bdf30f3 100644
--- a/src/plugins/media-export/rygel-media-export-plugin.vala
+++ b/src/plugins/media-export/rygel-media-export-plugin.vala
@@ -29,6 +29,12 @@ private const string OUR_PLUGIN = "MediaExport";
  *
  */
 public void module_init (PluginLoader loader) {
+    if (loader.plugin_disabled (OUR_PLUGIN)) {
+        message ("Plugin '%s' disabled by user, ignoring..", OUR_PLUGIN);
+
+        return;
+    }
+
     MediaExport.Plugin plugin;
 
     try {
diff --git a/src/plugins/mediathek/rygel-mediathek-plugin.vala b/src/plugins/mediathek/rygel-mediathek-plugin.vala
index 9a2efe9..87a8fa5 100644
--- a/src/plugins/mediathek/rygel-mediathek-plugin.vala
+++ b/src/plugins/mediathek/rygel-mediathek-plugin.vala
@@ -24,6 +24,13 @@ using Rygel;
 using GUPnP;
 
 public void module_init (PluginLoader loader) {
+    if (loader.plugin_disabled (Mediathek.Plugin.NAME)) {
+        message ("Plugin '%s' disabled by user, ignoring..",
+                 Mediathek.Plugin.NAME);
+
+        return;
+    }
+
     var plugin = new Mediathek.Plugin ();
 
     loader.add_plugin (plugin);
diff --git a/src/plugins/mpris/rygel-mpris-plugin-factory.vala b/src/plugins/mpris/rygel-mpris-plugin-factory.vala
index f5f2674..f74db09 100644
--- a/src/plugins/mpris/rygel-mpris-plugin-factory.vala
+++ b/src/plugins/mpris/rygel-mpris-plugin-factory.vala
@@ -106,6 +106,12 @@ public class Rygel.MPRIS.PluginFactory {
     }
 
     private async void load_plugin_n_handle_error (string service_name) {
+        if (loader.plugin_disabled (service_name)) {
+            message ("Plugin '%s' disabled by user, ignoring..", service_name);
+
+            return;
+        }
+
         try {
             yield this.load_plugin (service_name);
         } catch (IOError error) {
diff --git a/src/plugins/playbin/rygel-playbin-plugin.vala b/src/plugins/playbin/rygel-playbin-plugin.vala
index 77a0ec1..39ebd4b 100644
--- a/src/plugins/playbin/rygel-playbin-plugin.vala
+++ b/src/plugins/playbin/rygel-playbin-plugin.vala
@@ -26,6 +26,13 @@ using Rygel;
 using Gee;
 
 public void module_init (PluginLoader loader) {
+    if (loader.plugin_disabled (Playbin.Plugin.NAME)) {
+        message ("Plugin '%s' disabled by user, ignoring..",
+                 Playbin.Plugin.NAME);
+
+        return;
+    }
+
     var plugin = new Playbin.Plugin ();
 
     loader.add_plugin (plugin);
diff --git a/src/plugins/test/rygel-test-plugin.vala b/src/plugins/test/rygel-test-plugin.vala
index d659b21..7a30451 100644
--- a/src/plugins/test/rygel-test-plugin.vala
+++ b/src/plugins/test/rygel-test-plugin.vala
@@ -26,6 +26,13 @@ using Rygel;
 using Gee;
 
 public void module_init (PluginLoader loader) {
+    if (loader.plugin_disabled (Rygel.Test.Plugin.NAME)) {
+        message ("Plugin '%s' disabled by user, ignoring..",
+                 Rygel.Test.Plugin.NAME);
+
+        return;
+    }
+
     var plugin = new Rygel.Test.Plugin ();
 
     loader.add_plugin (plugin);
diff --git a/src/plugins/tracker/rygel-tracker-plugin-factory.vala b/src/plugins/tracker/rygel-tracker-plugin-factory.vala
index 720402b..79b7549 100644
--- a/src/plugins/tracker/rygel-tracker-plugin-factory.vala
+++ b/src/plugins/tracker/rygel-tracker-plugin-factory.vala
@@ -28,6 +28,13 @@ using Gee;
 private Tracker.PluginFactory plugin_factory;
 
 public void module_init (PluginLoader loader) {
+    if (loader.plugin_disabled (Tracker.Plugin.NAME)) {
+        message ("Plugin '%s' disabled by user, ignoring..",
+                 Tracker.Plugin.NAME);
+
+        return;
+    }
+
     try {
         plugin_factory = new Tracker.PluginFactory (loader);
     } catch (IOError err) {
diff --git a/src/rygel/rygel-plugin-loader.vala b/src/rygel/rygel-plugin-loader.vala
index 8ee5f8b..68eaf2f 100644
--- a/src/rygel/rygel-plugin-loader.vala
+++ b/src/rygel/rygel-plugin-loader.vala
@@ -28,7 +28,9 @@ using Gee;
  * Responsible for plugin loading. Probes for shared library files in a specific
  * directry and tries to grab a function with a specific name and signature,
  * calls it. The loaded module can then add plugins to Rygel by calling the
- * add_plugin method.
+ * add_plugin method. NOTE: The module SHOULD make sure that plugin is not
+ * disabled by user using plugin_disabled method before creating the plugin
+ * instance and resources related to that instance.
  */
 public class Rygel.PluginLoader : Object {
     private delegate void ModuleInitFunc (PluginLoader loader);
@@ -60,21 +62,27 @@ public class Rygel.PluginLoader : Object {
         this.load_modules_from_dir.begin (dir);
     }
 
-    public void add_plugin (Plugin plugin) {
-        bool enabled = true;
+    /**
+     * Checks if a plugin is disabled by user
+     *
+     * @param name the name of plugin to check for.
+     *
+     * return true if plugin is disabled, false if not.
+     */
+    public bool plugin_disabled (string name) {
+        var enabled = true;
         try {
             var config = MetaConfig.get_default ();
-            enabled = config.get_enabled (plugin.name);
+            enabled = config.get_enabled (name);
         } catch (GLib.Error err) {}
 
-        if (enabled) {
-            message (_("New plugin '%s' available"), plugin.name);
-            this.plugin_hash.set (plugin.name, plugin);
-            this.plugin_available (plugin);
-        } else {
-            debug ("Plugin '%s' disabled in user configuration; ignoring..",
-                   plugin.name);
-        }
+        return !enabled;
+    }
+
+    public void add_plugin (Plugin plugin) {
+        message (_("New plugin '%s' available"), plugin.name);
+        this.plugin_hash.set (plugin.name, plugin);
+        this.plugin_available (plugin);
     }
 
     public Plugin? get_plugin_by_name (string name) {



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