summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKrzesimir Nowak <krnowak@openismus.com>2012-10-23 12:48:14 +0200
committerJens Georg <jensg@openismus.com>2012-10-29 15:51:27 +0100
commit77582e9fed9eb7e7cd88c5395015c2859c549067 (patch)
tree367e65c0c85bf0f68c6d3208032b012db7ec4009 /src
parent5cd2d3d31be50ebbaf79a9e2665b3cc2dc5e7750 (diff)
downloadrygel-77582e9fed9eb7e7cd88c5395015c2859c549067.tar.gz
server: Add UpdatableObject interface
Backends should implement this for persiting changes done by UpdateObject call in their storage back-end.
Diffstat (limited to 'src')
-rw-r--r--src/librygel-server/filelist.am3
-rw-r--r--src/librygel-server/rygel-item-updater.vala9
-rw-r--r--src/librygel-server/rygel-media-container.vala4
-rw-r--r--src/librygel-server/rygel-media-item.vala29
-rw-r--r--src/librygel-server/rygel-media-object.vala5
-rw-r--r--src/librygel-server/rygel-updatable-object.vala35
6 files changed, 68 insertions, 17 deletions
diff --git a/src/librygel-server/filelist.am b/src/librygel-server/filelist.am
index 87794eb1..b6c672c6 100644
--- a/src/librygel-server/filelist.am
+++ b/src/librygel-server/filelist.am
@@ -27,7 +27,8 @@ LIBRYGEL_SERVER_VAPI_SOURCE_FILES = \
rygel-media-server.vala \
rygel-media-engine.vala \
rygel-http-seek.vala \
- rygel-data-source.vala
+ rygel-data-source.vala \
+ rygel-updatable-object.vala
LIBRYGEL_SERVER_NONVAPI_SOURCE_FILES = \
rygel-browse.vala \
diff --git a/src/librygel-server/rygel-item-updater.vala b/src/librygel-server/rygel-item-updater.vala
index 600ba70e..c7b460f0 100644
--- a/src/librygel-server/rygel-item-updater.vala
+++ b/src/librygel-server/rygel-item-updater.vala
@@ -121,11 +121,12 @@ internal class Rygel.ItemUpdater: GLib.Object, Rygel.StateMachine {
var media_object = yield this.fetch_object ();
var current_list = csv_split (this.current_tag_value);
var new_list = csv_split (this.new_tag_value);
+ var result = yield media_object.apply_fragments
+ (current_list,
+ new_list,
+ this.content_dir.http_server);
-
- switch (media_object.apply_fragments (current_list,
- new_list,
- this.content_dir.http_server)) {
+ switch (result) {
case DIDLLiteFragmentResult.OK:
break;
case DIDLLiteFragmentResult.CURRENT_BAD_XML:
diff --git a/src/librygel-server/rygel-media-container.vala b/src/librygel-server/rygel-media-container.vala
index 0450db9a..4c379ba3 100644
--- a/src/librygel-server/rygel-media-container.vala
+++ b/src/librygel-server/rygel-media-container.vala
@@ -121,6 +121,10 @@ public abstract class Rygel.MediaContainer : MediaObject {
flags |= OCMFlags.DESTROYABLE;
}
+ if (this is UpdatableObject) {
+ flags |= OCMFlags.CHANGE_METADATA;
+ }
+
return flags;
}
}
diff --git a/src/librygel-server/rygel-media-item.vala b/src/librygel-server/rygel-media-item.vala
index 4e171a7f..c0312943 100644
--- a/src/librygel-server/rygel-media-item.vala
+++ b/src/librygel-server/rygel-media-item.vala
@@ -63,22 +63,29 @@ public abstract class Rygel.MediaItem : MediaObject {
internal override OCMFlags ocm_flags {
get {
+ var flags = OCMFlags.NONE;
+
if (this.place_holder) {
// Place-holder items are always destroyable.
- return OCMFlags.DESTROYABLE;
- }
+ flags |= OCMFlags.DESTROYABLE;
+ } else {
+ var config = MetaConfig.get_default ();
+ var allow_deletion = true;
- var config = MetaConfig.get_default ();
- var allow_deletion = true;
- try {
- allow_deletion = config.get_allow_deletion ();
- } catch (Error error) {}
+ try {
+ allow_deletion = config.get_allow_deletion ();
+ } catch (Error error) {}
- if (allow_deletion) {
- return OCMFlags.DESTROYABLE;
- } else {
- return OCMFlags.NONE;
+ if (allow_deletion) {
+ flags |= OCMFlags.DESTROYABLE;
+ }
+ }
+
+ if (this is UpdatableObject) {
+ flags |= OCMFlags.CHANGE_METADATA;
}
+
+ return flags;
}
}
diff --git a/src/librygel-server/rygel-media-object.vala b/src/librygel-server/rygel-media-object.vala
index 3e9e1d77..70249bc9 100644
--- a/src/librygel-server/rygel-media-object.vala
+++ b/src/librygel-server/rygel-media-object.vala
@@ -162,7 +162,7 @@ public abstract class Rygel.MediaObject : GLib.Object {
this.title = didl_object.title;
}
- internal DIDLLiteFragmentResult apply_fragments
+ internal async DIDLLiteFragmentResult apply_fragments
(LinkedList<string> current_fragments,
LinkedList<string> new_fragments,
HTTPServer http_server) {
@@ -178,6 +178,9 @@ public abstract class Rygel.MediaObject : GLib.Object {
if (result == DIDLLiteFragmentResult.OK) {
this.apply_didl_lite (didl_object);
+ if (this is UpdatableObject) {
+ yield (this as UpdatableObject).commit ();
+ }
}
} catch (Error e) {}
diff --git a/src/librygel-server/rygel-updatable-object.vala b/src/librygel-server/rygel-updatable-object.vala
new file mode 100644
index 00000000..a4ad9b48
--- /dev/null
+++ b/src/librygel-server/rygel-updatable-object.vala
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Author: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This file is part of Rygel.
+ *
+ * Rygel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Rygel is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * This interface should be implemented by 'updatable' objects - ones
+ * that allow modifying their own metadata in some persistent storage.
+ */
+public interface Rygel.UpdatableObject : MediaObject {
+ /**
+ * Commit changes in MediaObject to persistent storage.
+ *
+ * This is called after properties are changed. This happens when
+ * e.g. UpdateObject was called on this object.
+ */
+ public abstract async void commit () throws Error;
+}