[rygel] server,media-export: Use object.container



commit 56845ce1d78d4db698fda337e483c7304af42f3a
Author: Jens Georg <jensg openismus com>
Date:   Fri Jun 14 21:22:21 2013 +0200

    server,media-export: Use object.container
    
    We used to use object.container.storageFolder for XBox 360 compatibility but
    DLNA doesn't like that.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=702258

 src/librygel-server/rygel-client-hacks.vala        |    2 +-
 src/librygel-server/rygel-http-get.vala            |    2 +-
 src/librygel-server/rygel-media-container.vala     |    7 +++++--
 src/librygel-server/rygel-media-objects.vala       |    4 ++--
 src/librygel-server/rygel-object-creator.vala      |    1 +
 src/librygel-server/rygel-panasonic-hacks.vala     |    8 +++++++-
 src/librygel-server/rygel-samsung-tv-hacks.vala    |    7 ++++++-
 src/librygel-server/rygel-xbmc-hacks.vala          |    8 +++++++-
 src/librygel-server/rygel-xbox-hacks.vala          |   12 +++++++++++-
 .../rygel-media-export-writable-db-container.vala  |    3 ++-
 10 files changed, 43 insertions(+), 11 deletions(-)
---
diff --git a/src/librygel-server/rygel-client-hacks.vala b/src/librygel-server/rygel-client-hacks.vala
index a001b67..616fc53 100644
--- a/src/librygel-server/rygel-client-hacks.vala
+++ b/src/librygel-server/rygel-client-hacks.vala
@@ -86,7 +86,7 @@ internal abstract class Rygel.ClientHacks : GLib.Object {
     public virtual void translate_container_id (MediaQueryAction action,
                                                 ref string       container_id) {}
 
-    public virtual void apply (MediaItem item) {}
+    public virtual void apply (MediaObject object) {}
 
     public virtual void filter_sort_criteria (ref string sort_criteria) {}
 
diff --git a/src/librygel-server/rygel-http-get.vala b/src/librygel-server/rygel-http-get.vala
index 19422d0..2190b7f 100644
--- a/src/librygel-server/rygel-http-get.vala
+++ b/src/librygel-server/rygel-http-get.vala
@@ -95,7 +95,7 @@ internal class Rygel.HTTPGet : HTTPRequest {
         }
 
         if (this.hack != null) {
-            this.hack.apply (this.object as MediaItem);
+            this.hack.apply (this.object);
         }
 
         if (this.uri.thumbnail_index >= 0) {
diff --git a/src/librygel-server/rygel-media-container.vala b/src/librygel-server/rygel-media-container.vala
index efb2b70..ced21c9 100644
--- a/src/librygel-server/rygel-media-container.vala
+++ b/src/librygel-server/rygel-media-container.vala
@@ -201,7 +201,7 @@ public abstract class Rygel.MediaContainer : MediaObject {
         this.update_id = 0;
         this.storage_used = -1;
         this.total_deleted_child_count = 0;
-        this.upnp_class = STORAGE_FOLDER;
+        this.upnp_class = UPNP_CLASS;
         this.create_mode_enabled = false;
 
         this.container_updated.connect (on_container_updated);
@@ -285,7 +285,10 @@ public abstract class Rygel.MediaContainer : MediaObject {
         didl_container.child_count = this.child_count;
         didl_container.upnp_class = this.upnp_class;
         didl_container.searchable = this is SearchableContainer;
-        didl_container.storage_used = this.storage_used;
+        if (this.upnp_class == STORAGE_FOLDER) {
+            didl_container.storage_used = this.storage_used;
+        }
+
         if (this is TrackableContainer) {
             didl_container.container_update_id = this.update_id;
             didl_container.update_id = this.object_update_id;
diff --git a/src/librygel-server/rygel-media-objects.vala b/src/librygel-server/rygel-media-objects.vala
index 84a4014..74142da 100644
--- a/src/librygel-server/rygel-media-objects.vala
+++ b/src/librygel-server/rygel-media-objects.vala
@@ -58,8 +58,8 @@ public class Rygel.MediaObjects : ArrayList<MediaObject> {
                              HTTPServer   http_server,
                              ClientHacks? hacks) throws Error {
         foreach (var result in this) {
-            if (result is MediaItem && hacks != null) {
-                hacks.apply (result as MediaItem);
+            if (hacks != null) {
+                hacks.apply (result);
             }
 
             result.serialize (serializer, http_server);
diff --git a/src/librygel-server/rygel-object-creator.vala b/src/librygel-server/rygel-object-creator.vala
index da11f28..97e471e 100644
--- a/src/librygel-server/rygel-object-creator.vala
+++ b/src/librygel-server/rygel-object-creator.vala
@@ -544,6 +544,7 @@ internal class Rygel.ObjectCreator: GLib.Object, Rygel.StateMachine {
             return new MusicItem (id, parent, title);
         case PlaylistItem.UPNP_CLASS:
             return new PlaylistItem (id, parent, title);
+        case MediaContainer.UPNP_CLASS:
         case MediaContainer.STORAGE_FOLDER:
             return new BaseMediaContainer (id, parent, title, 0);
         case MediaContainer.PLAYLIST:
diff --git a/src/librygel-server/rygel-panasonic-hacks.vala b/src/librygel-server/rygel-panasonic-hacks.vala
index f77a14d..e3bd7de 100644
--- a/src/librygel-server/rygel-panasonic-hacks.vala
+++ b/src/librygel-server/rygel-panasonic-hacks.vala
@@ -42,7 +42,13 @@ internal class Rygel.PanasonicHacks : ClientHacks {
         base (AGENT, message);
     }
 
-    public override void apply (MediaItem item) {
+    public override void apply (MediaObject object) {
+        if (!(object is MediaItem)) {
+            return;
+        }
+
+        var item = object as MediaItem;
+
         if (!(item is VisualItem)) {
             return;
         }
diff --git a/src/librygel-server/rygel-samsung-tv-hacks.vala b/src/librygel-server/rygel-samsung-tv-hacks.vala
index f276edc..60127c5 100644
--- a/src/librygel-server/rygel-samsung-tv-hacks.vala
+++ b/src/librygel-server/rygel-samsung-tv-hacks.vala
@@ -28,7 +28,12 @@ internal class Rygel.SamsungTVHacks : ClientHacks {
         base (AGENT, message);
     }
 
-    public override void apply (MediaItem item) {
+    public override void apply (MediaObject object) {
+        if (!(object is MediaItem)) {
+            return;
+        }
+
+        var item = object as MediaItem;
         if (item.mime_type == "video/x-matroska") {
             item.mime_type = "video/x-mkv";
         }
diff --git a/src/librygel-server/rygel-xbmc-hacks.vala b/src/librygel-server/rygel-xbmc-hacks.vala
index d38f8bc..f028ace 100644
--- a/src/librygel-server/rygel-xbmc-hacks.vala
+++ b/src/librygel-server/rygel-xbmc-hacks.vala
@@ -32,7 +32,13 @@ internal class Rygel.XBMCHacks : ClientHacks {
         base (AGENT, message);
     }
 
-    public override void apply (MediaItem item) {
+    public override void apply (MediaObject object) {
+        if (!(object is MediaItem)) {
+            return;
+        }
+
+        var item = object as MediaItem;
+
         if (item.mime_type == "audio/mp4" ||
             item.mime_type == "audio/3gpp" ||
             item.mime_type == "audio/vnd.dlna.adts") {
diff --git a/src/librygel-server/rygel-xbox-hacks.vala b/src/librygel-server/rygel-xbox-hacks.vala
index 33b33b6..9592d45 100644
--- a/src/librygel-server/rygel-xbox-hacks.vala
+++ b/src/librygel-server/rygel-xbox-hacks.vala
@@ -112,7 +112,17 @@ internal class Rygel.XBoxHacks : ClientHacks {
         }
     }
 
-    public override void apply (MediaItem item) {
+    public override void apply (MediaObject object) {
+        if (object is MediaContainer) {
+            if (object.upnp_class == MediaContainer.UPNP_CLASS) {
+                object.upnp_class = MediaContainer.STORAGE_FOLDER;
+            }
+
+            return;
+        }
+
+        var item = object as MediaItem;
+
         if (item.mime_type == "video/x-msvideo") {
             item.mime_type = "video/avi";
         } else if (item.mime_type == "video/mpeg") {
diff --git a/src/plugins/media-export/rygel-media-export-writable-db-container.vala 
b/src/plugins/media-export/rygel-media-export-writable-db-container.vala
index 2e0a272..3725456 100644
--- a/src/plugins/media-export/rygel-media-export-writable-db-container.vala
+++ b/src/plugins/media-export/rygel-media-export-writable-db-container.vala
@@ -53,7 +53,7 @@ internal class Rygel.MediaExport.WritableDbContainer : TrackableDbContainer,
         this.create_classes.add (Rygel.PlaylistItem.UPNP_CLASS);
 
         // Containers
-        this.create_classes.add (Rygel.MediaContainer.STORAGE_FOLDER);
+        this.create_classes.add (Rygel.MediaContainer.UPNP_CLASS);
     }
 
     public virtual async void add_item (Rygel.MediaItem item,
@@ -80,6 +80,7 @@ internal class Rygel.MediaExport.WritableDbContainer : TrackableDbContainer,
         container.parent = this;
         switch (container.upnp_class) {
         case MediaContainer.STORAGE_FOLDER:
+        case MediaContainer.UPNP_CLASS:
             var file = File.new_for_uri (container.uris[0]);
             container.id = MediaCache.get_id (file);
             if (file.is_native ()) {


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