[rygel/wip/track-changes] wip: Implement search for upnp:*UpdateID
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel/wip/track-changes] wip: Implement search for upnp:*UpdateID
- Date: Mon, 22 Oct 2012 12:49:52 +0000 (UTC)
commit d403cabba6852366ae45fa858476b8cb53d3ec63
Author: Jens Georg <jensg openismus com>
Date: Mon Oct 22 14:48:25 2012 +0200
wip: Implement search for upnp:*UpdateID
src/librygel-server/rygel-content-directory.vala | 8 ++++
src/librygel-server/rygel-media-object.vala | 3 --
.../rygel-relational-expression.vala | 39 ++++++++++++++++----
3 files changed, 39 insertions(+), 11 deletions(-)
---
diff --git a/src/librygel-server/rygel-content-directory.vala b/src/librygel-server/rygel-content-directory.vala
index 123d321..66dd4bc 100644
--- a/src/librygel-server/rygel-content-directory.vala
+++ b/src/librygel-server/rygel-content-directory.vala
@@ -76,6 +76,8 @@ internal class Rygel.ContentDirectory: Service {
private string service_reset_token;
+ private string search_caps;
+
public override void constructed () {
this.cancellable = new Cancellable ();
@@ -94,6 +96,12 @@ internal class Rygel.ContentDirectory: Service {
this.last_change = new LastChange ();
+ this.search_caps = RelationalExpression.CAPS;
+
+ if (PluginCapabilities.TRACK_CHANGES in plugin.capabilities) {
+ this.search_caps += ",upnp:objectUpdateID,upnp:containerUpdateID";
+ }
+
this.feature_list =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<Features xmlns=\"urn:schemas-upnp-org:av:avs\" " +
diff --git a/src/librygel-server/rygel-media-object.vala b/src/librygel-server/rygel-media-object.vala
index a4b78d1..2421c56 100644
--- a/src/librygel-server/rygel-media-object.vala
+++ b/src/librygel-server/rygel-media-object.vala
@@ -42,9 +42,6 @@ public abstract class Rygel.MediaObject : GLib.Object {
public string ref_id;
public string upnp_class;
public uint64 modified;
- // TODO: Spec says that upnp.objectUpdateID is unsigned int.
- // Should I add a compare_uint to RelationalExpression or just use
- // signed int?
public uint object_update_id;
public Gee.ArrayList<string> uris;
diff --git a/src/librygel-server/rygel-relational-expression.vala b/src/librygel-server/rygel-relational-expression.vala
index 5949f5d..4734742 100644
--- a/src/librygel-server/rygel-relational-expression.vala
+++ b/src/librygel-server/rygel-relational-expression.vala
@@ -31,8 +31,7 @@ public class Rygel.RelationalExpression :
Rygel.SearchExpression<SearchCriteriaOp,string,string> {
internal const string CAPS = "@id,@parentID,@refID,upnp:class," +
"dc:title,upnp:artist,upnp:album," +
- "dc:creator,upnp:createClass,@childCount," +
- "upnp:objectUpdateID,upnp:containerUpdateID";
+ "dc:creator,upnp:createClass,@childCount";
public override bool satisfied_by (MediaObject media_object) {
switch (this.operand1) {
@@ -46,6 +45,15 @@ public class Rygel.RelationalExpression :
return this.compare_string (media_object.upnp_class);
case "dc:title":
return this.compare_string (media_object.title);
+ case "upnp:objectUpdateID":
+ return this.compare_uint (media_object.object_update_id);
+ case "upnp:containerUpdateID":
+ if (!(media_object is MediaContainer)) {
+ return false;
+ }
+
+ var container = media_object as MediaContainer;
+ return this.compare_uint (container.update_id);
case "upnp:createClass":
if (!(media_object is WritableContainer)) {
return false;
@@ -78,12 +86,6 @@ public class Rygel.RelationalExpression :
var container = media_object as MediaContainer;
return this.compare_int (container.child_count);
- /*
- case "upnp:objectUpdateID":
- return this.compare_int ();
- case "upnp:containerUpdateID":
- return this.compare_int ();
- */
default:
return false;
}
@@ -156,4 +158,25 @@ public class Rygel.RelationalExpression :
return false;
}
}
+
+ public bool compare_uint (uint integer) {
+ var operand2 = uint64.parse (this.operand2);
+
+ switch (this.op) {
+ case SearchCriteriaOp.EQ:
+ return integer == operand2;
+ case SearchCriteriaOp.NEQ:
+ return integer != operand2;
+ case SearchCriteriaOp.LESS:
+ return integer < operand2;
+ case SearchCriteriaOp.LEQ:
+ return integer <= operand2;
+ case SearchCriteriaOp.GREATER:
+ return integer > operand2;
+ case SearchCriteriaOp.GEQ:
+ return integer >= operand2;
+ default:
+ return false;
+ }
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]