diff options
author | Jens Georg <mail@jensge.org> | 2012-09-17 13:43:48 +0200 |
---|---|---|
committer | Jens Georg <mail@jensge.org> | 2012-09-18 16:41:21 +0200 |
commit | bbfd9b6a909065f57fbca58d22a7ad0821be534b (patch) | |
tree | 797112ef039f2ef073eeb102ae3b4251465633bc /src | |
parent | 5354888dea9db753f3d33d327171b6f008fae13a (diff) | |
download | rygel-bbfd9b6a909065f57fbca58d22a7ad0821be534b.tar.gz |
media-export: Drop file suffix filter
Use content-type based filter instead
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/media-export/rygel-media-export-harvester.vala | 45 | ||||
-rw-r--r-- | src/plugins/media-export/rygel-media-export-harvesting-task.vala | 15 |
2 files changed, 16 insertions, 44 deletions
diff --git a/src/plugins/media-export/rygel-media-export-harvester.vala b/src/plugins/media-export/rygel-media-export-harvester.vala index 769558a4..7c9a06cd 100644 --- a/src/plugins/media-export/rygel-media-export-harvester.vala +++ b/src/plugins/media-export/rygel-media-export-harvester.vala @@ -30,7 +30,6 @@ internal class Rygel.MediaExport.Harvester : GLib.Object { private HashMap<File, uint> extraction_grace_timers; private MetadataExtractor extractor; private RecursiveFileMonitor monitor; - private Regex file_filter; private Cancellable cancellable; // Properties @@ -60,7 +59,6 @@ internal class Rygel.MediaExport.Harvester : GLib.Object { (EqualFunc) File.equal); this.extraction_grace_timers = new HashMap<File, uint> (File.hash, (EqualFunc)File.equal); - this.create_file_filter (); } /** @@ -85,7 +83,6 @@ internal class Rygel.MediaExport.Harvester : GLib.Object { var task = new HarvestingTask (new MetadataExtractor (), this.monitor, - this.file_filter, file, parent, flag); @@ -126,34 +123,6 @@ internal class Rygel.MediaExport.Harvester : GLib.Object { } } - /** - * Construct positive filter from config - * - * Takes a list of file extensions from config, escapes them and builds a - * regular expression to match against the files encountered. - */ - private void create_file_filter () { - try { - var config = MetaConfig.get_default (); - var extensions = config.get_string_list ("MediaExport", - "include-filter"); - - // never trust user input - string[] escaped_extensions = new string[0]; - foreach (var extension in extensions) { - escaped_extensions += Regex.escape_string (extension); - } - - var list = string.joinv ("|", escaped_extensions); - this.file_filter = new Regex ( - "(%s)$".printf (list), - RegexCompileFlags.CASELESS | - RegexCompileFlags.OPTIMIZE); - } catch (Error error) { - this.file_filter = null; - } - } - private void on_file_changed (File file, File? other, FileMonitorEvent event) { @@ -177,11 +146,15 @@ internal class Rygel.MediaExport.Harvester : GLib.Object { file.get_uri ()); try { var cache = MediaCache.get_default (); - var type = file.query_file_type (FileQueryInfoFlags.NONE, - this.cancellable); - if (type == FileType.DIRECTORY || - this.file_filter == null || - this.file_filter.match (file.get_uri ())) { + var info = file.query_info (FileAttribute.STANDARD_TYPE + "," + + FileAttribute.STANDARD_CONTENT_TYPE, + FileQueryInfoFlags.NONE, + this.cancellable); + if (info.get_file_type () == FileType.DIRECTORY || + info.get_content_type ().has_prefix ("image/") || + info.get_content_type ().has_prefix ("video/") || + info.get_content_type ().has_prefix ("audio/") || + info.get_content_type () == "application/ogg") { string id; try { MediaContainer parent_container = null; diff --git a/src/plugins/media-export/rygel-media-export-harvesting-task.vala b/src/plugins/media-export/rygel-media-export-harvesting-task.vala index 72c5428d..d8d89b3c 100644 --- a/src/plugins/media-export/rygel-media-export-harvesting-task.vala +++ b/src/plugins/media-export/rygel-media-export-harvesting-task.vala @@ -29,7 +29,6 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine, private GLib.Queue<MediaContainer> containers; private Gee.Queue<File> files; private RecursiveFileMonitor monitor; - private Regex file_filter; private string flag; private MediaContainer parent; private const int BATCH_SIZE = 256; @@ -40,12 +39,11 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine, FileAttribute.STANDARD_NAME + "," + FileAttribute.STANDARD_TYPE + "," + FileAttribute.TIME_MODIFIED + "," + + FileAttribute.STANDARD_CONTENT_TYPE + "," + FileAttribute.STANDARD_SIZE; - public HarvestingTask (MetadataExtractor extractor, RecursiveFileMonitor monitor, - Regex? file_filter, File file, MediaContainer parent, string? flag = null) { @@ -69,7 +67,6 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine, this.containers = new GLib.Queue<MediaContainer> (); this.monitor = monitor; this.flag = flag; - this.file_filter = file_filter; } public void cancel () { @@ -187,12 +184,14 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine, } else { // Check if the file needs to be harvested at all either because // it is denied by filter or it hasn't updated - if (this.file_filter != null && - !this.file_filter.match (file.get_uri ())) { - return false; + if (info.get_content_type ().has_prefix ("image/") || + info.get_content_type ().has_prefix ("video/") || + info.get_content_type ().has_prefix ("audio/") || + info.get_content_type () == "application/ogg") { + return this.push_if_changed_or_unknown (file, info); } - return this.push_if_changed_or_unknown (file, info); + return false; } } |