[rygel] server,media-export: Use object.container
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] server,media-export: Use object.container
- Date: Tue, 25 Jun 2013 11:43:11 +0000 (UTC)
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]