summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2016-04-27 22:14:05 +0200
committerJens Georg <mail@jensge.org>2016-04-27 22:19:32 +0200
commitc01c882f578c580e63e19020bde0a860d6406e90 (patch)
treece0a32b62d762187318f6776d980e79dd5a18590
parente4141aba358e0a57ab50f9536d245052a0d172b5 (diff)
downloadrygel-c01c882f578c580e63e19020bde0a860d6406e90.tar.gz
tracker: Add option to limit exported files to a set of uris
Signed-off-by: Jens Georg <mail@jensge.org>
-rw-r--r--data/rygel.conf1
-rw-r--r--src/plugins/tracker/rygel-tracker-selection-query.vala58
2 files changed, 59 insertions, 0 deletions
diff --git a/data/rygel.conf b/data/rygel.conf
index 5c221cbf..6325d720 100644
--- a/data/rygel.conf
+++ b/data/rygel.conf
@@ -92,6 +92,7 @@ image-timeout = 15
[Tracker]
enabled=true
+only-export-from=@MUSIC@;@VIDEOS@;@PICTURES@
share-pictures=true
share-videos=true
share-music=true
diff --git a/src/plugins/tracker/rygel-tracker-selection-query.vala b/src/plugins/tracker/rygel-tracker-selection-query.vala
index 83545882..b36bbe87 100644
--- a/src/plugins/tracker/rygel-tracker-selection-query.vala
+++ b/src/plugins/tracker/rygel-tracker-selection-query.vala
@@ -41,6 +41,8 @@ public class Rygel.Tracker.SelectionQuery : Query {
private const string AVAILABLE_FILTER = "(tracker:available(" +
ITEM_VARIABLE + ") = true)";
+ private string uri_filter;
+
public ArrayList<string> variables;
public ArrayList<string> filters;
@@ -68,6 +70,59 @@ public class Rygel.Tracker.SelectionQuery : Query {
this.order_by = order_by;
this.offset = offset;
this.max_count = max_count;
+
+ ArrayList<string> uris;
+ ArrayList<File> actual_uris;
+
+ var config = MetaConfig.get_default ();
+
+ try {
+ uris = config.get_string_list ("Tracker", "only-export-from");
+ } catch (Error error) {
+ uris = new ArrayList<string> ();
+ }
+
+ actual_uris = new ArrayList<File> ((EqualDataFunc<File>) File.equal);
+
+ var home_dir = File.new_for_path (Environment.get_home_dir ());
+ unowned string pictures_dir = Environment.get_user_special_dir
+ (UserDirectory.PICTURES);
+ unowned string videos_dir = Environment.get_user_special_dir
+ (UserDirectory.VIDEOS);
+ unowned string music_dir = Environment.get_user_special_dir
+ (UserDirectory.MUSIC);
+
+ uri_filter = "(";
+ foreach (var uri in uris) {
+ var file = File.new_for_commandline_arg (uri);
+ if (!file.equal (home_dir)) {
+ var actual_uri = uri;
+
+ if (pictures_dir != null) {
+ actual_uri = actual_uri.replace ("@PICTURES@", pictures_dir);
+ }
+ if (videos_dir != null) {
+ actual_uri = actual_uri.replace ("@VIDEOS@", videos_dir);
+ }
+ if (music_dir != null) {
+ actual_uri = actual_uri.replace ("@MUSIC@", music_dir);
+ }
+
+ // protect against special directories expanding to $HOME
+ file = File.new_for_commandline_arg (actual_uri);
+ if (file.equal (home_dir)) {
+ continue;
+ }
+
+ uri_filter += "tracker:uri-is-descendant(\"%s\", nie:url(%s))".printf
+ (file.get_uri (), ITEM_VARIABLE);
+ }
+ }
+ if (uri_filter != "(") {
+ uri_filter += ")";
+ } else {
+ uri_filter = null;
+ }
}
public SelectionQuery.clone (SelectionQuery query) {
@@ -118,6 +173,9 @@ public class Rygel.Tracker.SelectionQuery : Query {
}
} catch (Error error) {};
+ // Limit the files to a set of folders that may have been configured
+ filters.add (uri_filter);
+
if (filters.size > 0) {
query += " FILTER (";
for (var i = 0; i < filters.size; i++) {