From c01c882f578c580e63e19020bde0a860d6406e90 Mon Sep 17 00:00:00 2001 From: Jens Georg Date: Wed, 27 Apr 2016 22:14:05 +0200 Subject: tracker: Add option to limit exported files to a set of uris Signed-off-by: Jens Georg --- data/rygel.conf | 1 + .../tracker/rygel-tracker-selection-query.vala | 58 ++++++++++++++++++++++ 2 files changed, 59 insertions(+) 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 variables; public ArrayList 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 uris; + ArrayList actual_uris; + + var config = MetaConfig.get_default (); + + try { + uris = config.get_string_list ("Tracker", "only-export-from"); + } catch (Error error) { + uris = new ArrayList (); + } + + actual_uris = new ArrayList ((EqualDataFunc) 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++) { -- cgit v1.2.1