[rygel] tracker: Simplified handling of nested properties
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [rygel] tracker: Simplified handling of nested properties
- Date: Wed, 23 Dec 2009 15:41:55 +0000 (UTC)
commit 3b9a7f1feef654808092127904a4753e8329e8f5
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date: Mon Dec 21 20:17:55 2009 +0200
tracker: Simplified handling of nested properties
Simplified handling of nested properties using new chainable triplets and
recursion.
.../tracker/rygel-tracker-search-container.vala | 60 ++++++++++++--------
1 files changed, 36 insertions(+), 24 deletions(-)
---
diff --git a/src/plugins/tracker/rygel-tracker-search-container.vala b/src/plugins/tracker/rygel-tracker-search-container.vala
index 2085712..c9d08f5 100644
--- a/src/plugins/tracker/rygel-tracker-search-container.vala
+++ b/src/plugins/tracker/rygel-tracker-search-container.vala
@@ -73,30 +73,17 @@ public class Rygel.TrackerSearchContainer : Rygel.MediaContainer {
var optional = new TrackerQueryTriplets ();
foreach (var chain in this.item_factory.get_metadata_key_chains ()) {
- string next_subject = null;
+ var key = chain.last ();
+ var variable = "?" + key.replace (":", "_");
- foreach (var key in chain) {
- var variable = "?" + key.replace (":", "_");
+ variables.add (variable);
- string subject;
- if (key == chain.first ()) {
- subject = ITEM_VARIABLE;
- } else {
- subject = next_subject;
- }
-
- var triplet = new TrackerQueryTriplet (subject,
- key,
- variable);
- if (!our_mandatory.contains (triplet)) {
- optional.add (triplet);
- }
+ var triplet = this.triplet_from_chain (chain,
+ variable,
+ ITEM_VARIABLE);
- if (key == chain.last ()) {
- variables.add (variable);
- }
-
- next_subject = variable;
+ if (!our_mandatory.contains (triplet)) {
+ optional.add (triplet);
}
}
@@ -118,6 +105,31 @@ public class Rygel.TrackerSearchContainer : Rygel.MediaContainer {
}
}
+ private TrackerQueryTriplet triplet_from_chain (
+ Gee.List<string> chain,
+ string? variable = null,
+ string? subject = null) {
+ var key = chain.first ();
+
+ TrackerQueryTriplet triplet;
+
+ if (chain.size == 1) {
+ triplet = new TrackerQueryTriplet (subject,
+ key,
+ variable,
+ subject != null);
+ } else {
+ var child_chain = chain.slice (chain.index_of (key) + 1,
+ chain.size);
+
+ var child = this.triplet_from_chain (child_chain, variable);
+
+ triplet = new TrackerQueryTriplet.chain (subject, key, child);
+ }
+
+ return triplet;
+ }
+
private async void get_children_count () {
try {
var query = new TrackerQuery.clone (this.query);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]