From f70d5de22829c346836045f520557c66267064b2 Mon Sep 17 00:00:00 2001 From: "Zeeshan Ali (Khattak)" Date: Wed, 19 Jan 2011 00:56:39 +0200 Subject: [PATCH] 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) { -- 2.7.4