server: Fix use of DLNA.ORG_AnyContainer
authorJens Georg <jensg@openismus.com>
Tue, 29 Jan 2013 10:58:58 +0000 (11:58 +0100)
committerJens Georg <jensg@openismus.com>
Tue, 29 Jan 2013 10:59:27 +0000 (11:59 +0100)
src/librygel-server/rygel-item-creator.vala
src/librygel-server/rygel-media-container.vala
tests/rygel-item-creator-test.vala

index 69e4d5b..e33b6e7 100644 (file)
@@ -72,12 +72,12 @@ internal class Rygel.ItemCreator: GLib.Object, Rygel.StateMachine {
             /* Verify the create class. Note that we always assume
              * createClass@includeDerived to be false.
              *
-             * DLNA_ORG.AnyContainer is a special case. We are allowed to
+             * DLNA.ORG_AnyContainer is a special case. We are allowed to
              * modify the UPnP class to something we support and
              * fetch_container took care of this already.
              */
             if (!container.can_create (this.didl_item.upnp_class) &&
-                this.container_id != "DLNA_ORG.AnyContainer") {
+                this.container_id != MediaContainer.ANY) {
                 throw new ContentDirectoryError.BAD_METADATA
                                         ("Creating of objects with class %s " +
                                          "is not supported in %s",
@@ -95,7 +95,7 @@ internal class Rygel.ItemCreator: GLib.Object, Rygel.StateMachine {
             // Conclude the successful action
             this.conclude ();
 
-            if (this.container_id == "DLNA.ORG_AnyContainer" &&
+            if (this.container_id == MediaContainer.ANY &&
                 this.item.place_holder) {
                 var queue = ItemRemovalQueue.get_default ();
 
@@ -269,7 +269,7 @@ internal class Rygel.ItemCreator: GLib.Object, Rygel.StateMachine {
     private async WritableContainer fetch_container () throws Error {
         MediaObject media_object = null;
 
-        if (this.container_id == "DLNA.ORG_AnyContainer") {
+        if (this.container_id == MediaContainer.ANY) {
             media_object = yield this.find_any_container ();
         } else {
             media_object = yield this.content_dir.root_container.find_object
index 711f759..bee84fb 100644 (file)
@@ -45,6 +45,8 @@ public enum Rygel.ObjectEventType {
  * REALNAME, in in the title. See the title property of the #RygelMediaObject.
  */
 public abstract class Rygel.MediaContainer : MediaObject {
+    // Magic ID used by DLNA to denote any container that can create the item
+    public const string ANY = "DLNA.ORG_AnyContainer";
     public const string UPNP_CLASS = "object.container";
     public const string STORAGE_FOLDER = UPNP_CLASS + ".storageFolder";
     public const string MUSIC_ALBUM = UPNP_CLASS + ".album.musicAlbum";
index 63cb8e2..019d137 100644 (file)
@@ -204,6 +204,7 @@ public class Rygel.MediaContainer : Rygel.MediaObject {
     public Gee.ArrayList<string> create_classes = new Gee.ArrayList<string> ();
     public int child_count;
     public string sort_criteria = "+dc:title";
+    public static const string ANY = "DLNA.ORG_AnyContainer";
     public uint update_id;
 
     // mockable elements