[rygel] server,media-export: Fix OCM flags
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] server,media-export: Fix OCM flags
- Date: Tue, 30 Jul 2013 08:36:48 +0000 (UTC)
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]