[rygel] core,plugin: Simplify MediaServer implementation



commit 732a1c8d736d27ef2c93f1594c50db85b5dfde18
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date:   Sun Aug 1 04:26:14 2010 +0300

    core,plugin: Simplify MediaServer implementation
    
    We no longer require plugins to provide a ContentDirectory service but
    instead they need to always subclass Plugin class and implement it's
    'get_root_container' method.

 src/plugins/external/Makefile.am                   |    3 +-
 .../external/rygel-external-content-dir.vala       |   47 --------------------
 src/plugins/external/rygel-external-plugin.vala    |   13 +++++-
 src/plugins/gst-launch/Makefile.am                 |    1 -
 .../gst-launch/rygel-gst-launch-content-dir.vala   |   34 --------------
 .../gst-launch/rygel-gst-launch-plugin.vala        |   15 +++++-
 .../media-export/rygel-media-export-plugin.vala    |   14 ++++--
 src/plugins/mediathek/rygel-mediathek-plugin.vala  |   15 ++++---
 src/plugins/test/Makefile.am                       |    3 +-
 src/plugins/test/rygel-test-content-dir.vala       |   38 ----------------
 src/plugins/test/rygel-test-plugin.vala            |   15 +++++-
 src/plugins/tracker/Makefile.am                    |    4 +-
 .../tracker/rygel-tracker-content-directory.vala   |   38 ----------------
 src/plugins/tracker/rygel-tracker-plugin.vala      |    8 +++-
 src/rygel/rygel-content-directory.vala             |   14 +++---
 src/rygel/rygel-media-server-plugin.vala           |    8 +++-
 16 files changed, 76 insertions(+), 194 deletions(-)
---
diff --git a/src/plugins/external/Makefile.am b/src/plugins/external/Makefile.am
index 1307c11..397f888 100644
--- a/src/plugins/external/Makefile.am
+++ b/src/plugins/external/Makefile.am
@@ -17,8 +17,7 @@ AM_CFLAGS = $(LIBGUPNP_CFLAGS) \
 	    -I$(top_srcdir)/src/rygel -DDATA_DIR='"$(shareddir)"' \
 	    -include config.h
 
-librygel_external_la_SOURCES = rygel-external-content-dir.vala \
-			       rygel-external-container.vala \
+librygel_external_la_SOURCES = rygel-external-container.vala \
 			       rygel-external-dummy-container.vala \
 			       rygel-external-item-factory.vala \
 			       rygel-external-thumbnail-factory.vala \
diff --git a/src/plugins/external/rygel-external-plugin.vala b/src/plugins/external/rygel-external-plugin.vala
index 6078fb0..c9539cd 100644
--- a/src/plugins/external/rygel-external-plugin.vala
+++ b/src/plugins/external/rygel-external-plugin.vala
@@ -40,7 +40,6 @@ public class Rygel.External.Plugin : Rygel.MediaServerPlugin {
                    IconInfo? icon) {
         base (service_name,
               title,
-              typeof (ContentDir),
               "Rygel External " + title);
 
         this.service_name = service_name;
@@ -51,4 +50,16 @@ public class Rygel.External.Plugin : Rygel.MediaServerPlugin {
             this.add_icon (icon);
         }
     }
+
+    public override MediaContainer? get_root_container (
+                                        ContentDirectory content_dir) {
+        return new Container ("0",
+                              this.title,
+                              this.child_count,
+                              this.searchable,
+                              this.service_name,
+                              this.root_object,
+                              content_dir.context.host_ip,
+                              null);
+    }
 }
diff --git a/src/plugins/gst-launch/Makefile.am b/src/plugins/gst-launch/Makefile.am
index a512eac..575d925 100644
--- a/src/plugins/gst-launch/Makefile.am
+++ b/src/plugins/gst-launch/Makefile.am
@@ -14,7 +14,6 @@ AM_CFLAGS = $(LIBGUPNP_CFLAGS) \
 
 librygel_gst_launch_la_SOURCES = rygel-gst-launch-plugin.vala \
 				rygel-gst-launch-root-container.vala \
-				rygel-gst-launch-content-dir.vala \
 				rygel-gst-launch-item.vala
 
 librygel_gst_launch_la_VALAFLAGS = --vapidir=$(top_srcdir)/src/rygel \
diff --git a/src/plugins/gst-launch/rygel-gst-launch-plugin.vala b/src/plugins/gst-launch/rygel-gst-launch-plugin.vala
index 471653a..10a59b3 100644
--- a/src/plugins/gst-launch/rygel-gst-launch-plugin.vala
+++ b/src/plugins/gst-launch/rygel-gst-launch-plugin.vala
@@ -24,9 +24,18 @@ using Rygel;
 using Gee;
 
 public void module_init (PluginLoader loader) {
-    var plugin = new MediaServerPlugin ("GstLaunch",
-                                        "Gst Launch",
-                                        typeof (GstLaunch.ContentDir));
+    var plugin = new GstLaunch.Plugin ();
+
     loader.add_plugin (plugin);
 }
 
+public class Rygel.GstLaunch.Plugin : Rygel.MediaServerPlugin {
+    public Plugin () {
+        base ("GstLaunch", "Gst Launch");
+    }
+
+    public override MediaContainer? get_root_container (
+                                        ContentDirectory content_dir) {
+        return new RootContainer (this.title);
+    }
+}
diff --git a/src/plugins/media-export/rygel-media-export-plugin.vala b/src/plugins/media-export/rygel-media-export-plugin.vala
index 26ca5ea..5e93017 100644
--- a/src/plugins/media-export/rygel-media-export-plugin.vala
+++ b/src/plugins/media-export/rygel-media-export-plugin.vala
@@ -28,14 +28,18 @@ using GLib;
  *
  */
 public void module_init (PluginLoader loader) {
-    var plugin = new MediaServerPlugin ("MediaExport",
-                                        _("@REALNAME@'s media"),
-                                        typeof (Rygel.MediaExport.ContentDir));
+    var plugin = new MediaExport.Plugin ();
+
     loader.add_plugin (plugin);
 }
 
-public class Rygel.MediaExport.ContentDir : ContentDirectory {
-    public override MediaContainer? create_root_container () {
+public class Rygel.MediaExport.Plugin : Rygel.MediaServerPlugin {
+    public Plugin () {
+        base ("MediaExport", _("@REALNAME@'s media"));
+    }
+
+    public override MediaContainer? get_root_container (
+                                        ContentDirectory content_dir) {
         return RootContainer.get_instance ();
     }
 }
diff --git a/src/plugins/mediathek/rygel-mediathek-plugin.vala b/src/plugins/mediathek/rygel-mediathek-plugin.vala
index 4b9c22e..86f7da2 100644
--- a/src/plugins/mediathek/rygel-mediathek-plugin.vala
+++ b/src/plugins/mediathek/rygel-mediathek-plugin.vala
@@ -24,15 +24,18 @@ using Rygel;
 using GUPnP;
 
 public void module_init (PluginLoader loader) {
-    var plugin = new MediaServerPlugin ("ZDFMediathek",
-                                        "ZDF Mediathek",
-                                        typeof (Mediathek.ContentDir));
+    var plugin = new Mediathek.Plugin ();
+
     loader.add_plugin (plugin);
 }
 
-public class Rygel.Mediathek.ContentDir : ContentDirectory {
-    public override MediaContainer? create_root_container () {
+public class Rygel.Mediathek.Plugin : Rygel.MediaServerPlugin {
+    public Plugin () {
+        base ("ZDFMediathek", "ZDF Mediathek");
+    }
+
+    public override MediaContainer? get_root_container (
+                                        ContentDirectory content_dir) {
         return RootContainer.get_instance ();
     }
 }
-
diff --git a/src/plugins/test/Makefile.am b/src/plugins/test/Makefile.am
index 9c6078b..77e6fae 100644
--- a/src/plugins/test/Makefile.am
+++ b/src/plugins/test/Makefile.am
@@ -17,8 +17,7 @@ AM_CFLAGS = $(LIBGUPNP_CFLAGS) \
 	    -I$(top_srcdir)/src/rygel -DDATA_DIR='"$(shareddir)"' \
 	    -include config.h
 
-librygel_test_la_SOURCES = rygel-test-content-dir.vala \
-			   rygel-test-root-container.vala \
+librygel_test_la_SOURCES = rygel-test-root-container.vala \
 			   rygel-test-item.vala \
 			   rygel-test-audio-item.vala \
 			   rygel-test-video-item.vala \
diff --git a/src/plugins/test/rygel-test-plugin.vala b/src/plugins/test/rygel-test-plugin.vala
index 9a02d07..ad57e66 100644
--- a/src/plugins/test/rygel-test-plugin.vala
+++ b/src/plugins/test/rygel-test-plugin.vala
@@ -26,9 +26,18 @@ using Rygel;
 using Gee;
 
 public void module_init (PluginLoader loader) {
-    var plugin = new MediaServerPlugin("Test",
-                                       "Test Streams",
-                                       typeof (Rygel.Test.ContentDir));
+    var plugin = new Rygel.Test.Plugin ();
+
     loader.add_plugin (plugin);
 }
 
+public class Rygel.Test.Plugin : Rygel.MediaServerPlugin {
+    public Plugin () {
+        base ("Test", "Test Streams");
+    }
+
+    public override MediaContainer? get_root_container (
+                                        ContentDirectory content_dir) {
+        return new RootContainer (this.title);
+    }
+}
diff --git a/src/plugins/tracker/Makefile.am b/src/plugins/tracker/Makefile.am
index b6adfbc..315e6e4 100644
--- a/src/plugins/tracker/Makefile.am
+++ b/src/plugins/tracker/Makefile.am
@@ -11,9 +11,7 @@ AM_CFLAGS = $(LIBGUPNP_CFLAGS) \
 	    -I$(top_srcdir)/src/rygel -DDATA_DIR='"$(datadir)"' \
 	    -include config.h
 
-librygel_media_tracker_la_SOURCES = \
-				    rygel-tracker-content-directory.vala \
-				    rygel-tracker-root-container.vala \
+librygel_media_tracker_la_SOURCES = rygel-tracker-root-container.vala \
 				    rygel-tracker-category-container.vala \
 				    rygel-tracker-music.vala \
 				    rygel-tracker-videos.vala \
diff --git a/src/plugins/tracker/rygel-tracker-plugin.vala b/src/plugins/tracker/rygel-tracker-plugin.vala
index d65aa47..b31f4a2 100644
--- a/src/plugins/tracker/rygel-tracker-plugin.vala
+++ b/src/plugins/tracker/rygel-tracker-plugin.vala
@@ -31,8 +31,7 @@ public class Rygel.Tracker.Plugin : Rygel.MediaServerPlugin {
         base ("Tracker",
               // @REALNAME@ is substituted for user's real name
               // and it doesn't need translation.
-              _("@REALNAME@'s media"),
-              typeof (Tracker.ContentDirectory));
+              _("@REALNAME@'s media"));
 
         var icon_info = new IconInfo ("image/png");
 
@@ -47,5 +46,10 @@ public class Rygel.Tracker.Plugin : Rygel.MediaServerPlugin {
             warning (_("Error creating URI from %s: %s"), ICON, err.message);
         }
     }
+
+    public override MediaContainer? get_root_container (
+                                        ContentDirectory content_dir) {
+        return new RootContainer (this.title);
+    }
 }
 
diff --git a/src/rygel/rygel-content-directory.vala b/src/rygel/rygel-content-directory.vala
index 46c7edf..fc13591 100644
--- a/src/rygel/rygel-content-directory.vala
+++ b/src/rygel/rygel-content-directory.vala
@@ -66,15 +66,9 @@ public class Rygel.ContentDirectory: Service {
 
     public uint32 system_update_id;
 
-    // Public abstract methods derived classes need to implement
-    public virtual MediaContainer? create_root_container () {
-       return null;
-    }
-
     public override void constructed () {
         this.cancellable = new Cancellable ();
-
-        this.root_container = this.create_root_container ();
+        this.root_container = this.get_root_container ();
 
         try {
             this.http_server = new HTTPServer (this, this.get_type ().name ());
@@ -138,6 +132,12 @@ public class Rygel.ContentDirectory: Service {
         this.http_server.run.begin ();
     }
 
+    private MediaContainer get_root_container () {
+        var plugin = this.root_device.resource_factory as MediaServerPlugin;
+
+        return plugin.get_root_container (this);
+    }
+
     ~ContentDirectory () {
         // Cancel all state machines
         this.cancellable.cancel ();
diff --git a/src/rygel/rygel-media-server-plugin.vala b/src/rygel/rygel-media-server-plugin.vala
index 73aa103..9aa10bf 100644
--- a/src/rygel/rygel-media-server-plugin.vala
+++ b/src/rygel/rygel-media-server-plugin.vala
@@ -27,7 +27,6 @@ public class Rygel.MediaServerPlugin : Rygel.Plugin {
 
     public MediaServerPlugin (string  name,
                               string? title,
-                              Type    content_dir_type,
                               string? description = null) {
         base (MEDIA_SERVER_DESC_PATH, name, title, description);
 
@@ -35,7 +34,7 @@ public class Rygel.MediaServerPlugin : Rygel.Plugin {
         var resource_info = new ResourceInfo (ContentDirectory.UPNP_ID,
                                               ContentDirectory.UPNP_TYPE,
                                               ContentDirectory.DESCRIPTION_PATH,
-                                              content_dir_type);
+                                              typeof (ContentDirectory));
         this.add_resource (resource_info);
 
         // Register Rygel.ConnectionManager
@@ -52,5 +51,10 @@ public class Rygel.MediaServerPlugin : Rygel.Plugin {
                                         typeof (MediaReceiverRegistrar));
         this.add_resource (resource_info);
     }
+
+    public virtual MediaContainer? get_root_container (
+                                        ContentDirectory content_dir) {
+        return null;
+    }
 }
 



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