[rygel] server,media-export: Fix OCM flags



commit 8787630a58748067490737df4c396788cf7bbe37
Author: Jens Georg <jensg openismus com>
Date:   Mon Jun 17 14:43:01 2013 +0200

    server,media-export: Fix OCM flags
    
    The OCM flags in the playlist root container need changing to not
    mention UPLOAD and UPLOAD_DESTROYABLE since it's not possible to add
    items in it, only containers.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=702255

 src/librygel-server/rygel-media-container.vala     |    2 +-
 src/librygel-server/rygel-media-item.vala          |    2 +-
 src/librygel-server/rygel-media-object.vala        |    2 +-
 src/librygel-server/rygel-object-creator.vala      |   17 +++++++++++++++--
 ...rygel-media-export-playlist-root-container.vala |   12 ++++++++++++
 5 files changed, 30 insertions(+), 5 deletions(-)
---
diff --git a/src/librygel-server/rygel-media-container.vala b/src/librygel-server/rygel-media-container.vala
index 4529c5b..5cd4494 100644
--- a/src/librygel-server/rygel-media-container.vala
+++ b/src/librygel-server/rygel-media-container.vala
@@ -125,7 +125,7 @@ public abstract class Rygel.MediaContainer : MediaObject {
 
     public string sort_criteria { set; get; default = DEFAULT_SORT_CRITERIA; }
 
-    internal override OCMFlags ocm_flags {
+    public override OCMFlags ocm_flags {
         get {
             if (!(this is WritableContainer) || this.uris.size == 0) {
                 return OCMFlags.NONE;
diff --git a/src/librygel-server/rygel-media-item.vala b/src/librygel-server/rygel-media-item.vala
index 87a70f4..f175c79 100644
--- a/src/librygel-server/rygel-media-item.vala
+++ b/src/librygel-server/rygel-media-item.vala
@@ -63,7 +63,7 @@ public abstract class Rygel.MediaItem : MediaObject {
 
     public string description { get; set; default = null; }
 
-    internal override OCMFlags ocm_flags {
+    public override OCMFlags ocm_flags {
         get {
             var flags = OCMFlags.NONE;
 
diff --git a/src/librygel-server/rygel-media-object.vala b/src/librygel-server/rygel-media-object.vala
index ef5f68f..f5914c9 100644
--- a/src/librygel-server/rygel-media-object.vala
+++ b/src/librygel-server/rygel-media-object.vala
@@ -125,7 +125,7 @@ public abstract class Rygel.MediaObject : GLib.Object {
         }
     }
 
-    internal abstract OCMFlags ocm_flags { get; }
+    public virtual OCMFlags ocm_flags { get { return OCMFlags.NONE; }}
 
     internal bool restricted {
         get {
diff --git a/src/librygel-server/rygel-object-creator.vala b/src/librygel-server/rygel-object-creator.vala
index 8e7df00..37cce2e 100644
--- a/src/librygel-server/rygel-object-creator.vala
+++ b/src/librygel-server/rygel-object-creator.vala
@@ -356,8 +356,21 @@ internal class Rygel.ObjectCreator: GLib.Object, Rygel.StateMachine {
         if (media_object == null || !(media_object is MediaContainer)) {
             throw new ContentDirectoryError.NO_SUCH_CONTAINER
                                         (_("No such container"));
-        } else if (!(OCMFlags.UPLOAD in media_object.ocm_flags) ||
-                   !(media_object is WritableContainer)) {
+        }
+
+        if (!(media_object is WritableContainer)) {
+            throw new ContentDirectoryError.RESTRICTED_PARENT
+                                        (_(" %%% Object creation in %s not allowed"),
+                                         media_object.id);
+        }
+
+        // If the object to be created is an item, ocm_flags must contain
+        // OCMFlags.UPLOAD, it it's a container, ocm_flags must contain
+        // OCMFlags.CREATE_CONTAINER
+        if (!((this.didl_object is DIDLLiteItem &&
+            (OCMFlags.UPLOAD in media_object.ocm_flags)) ||
+           (this.didl_object is DIDLLiteContainer &&
+            (OCMFlags.CREATE_CONTAINER in media_object.ocm_flags)))) {
             throw new ContentDirectoryError.RESTRICTED_PARENT
                                         (_("Object creation in %s not allowed"),
                                          media_object.id);
diff --git a/src/plugins/media-export/rygel-media-export-playlist-root-container.vala 
b/src/plugins/media-export/rygel-media-export-playlist-root-container.vala
index 66a6dde..b2ab262 100644
--- a/src/plugins/media-export/rygel-media-export-playlist-root-container.vala
+++ b/src/plugins/media-export/rygel-media-export-playlist-root-container.vala
@@ -19,6 +19,7 @@
  */
 
 using Gee;
+using GUPnP;
 
 /**
  * Special class for the toplevel virtual container which aggregates all
@@ -56,6 +57,17 @@ internal class Rygel.MediaExport.PlaylistRootContainer : Rygel.WritableContainer
         this.uris.add (PlaylistRootContainer.URI);
     }
 
+    public override OCMFlags ocm_flags {
+        get {
+            var flags = base.ocm_flags;
+
+            // This container does not allow upload
+            flags &= ~(OCMFlags.UPLOAD | OCMFlags.UPLOAD_DESTROYABLE);
+
+            return flags;
+        }
+    }
+
     public async void add_item (Rygel.MediaItem item,
                                 Cancellable?    cancellable)
                                 throws Error {


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