[rygel] media-export: Only build file-filter once



commit 0c74e75ae29ee235d596dfe95824f3c005054a1c
Author: Jens Georg <mail jensge org>
Date:   Thu Jul 29 17:55:33 2010 +0200

    media-export: Only build file-filter once
    
    File filter regex does not need to be generated for every harvesting
    task

 .../media-export/rygel-media-export-harvester.vala |   31 ++++++++++++++++++++
 .../rygel-media-export-harvesting-task.vala        |   21 +------------
 2 files changed, 33 insertions(+), 19 deletions(-)
---
diff --git a/src/plugins/media-export/rygel-media-export-harvester.vala b/src/plugins/media-export/rygel-media-export-harvester.vala
index 67e7e18..134565e 100644
--- a/src/plugins/media-export/rygel-media-export-harvester.vala
+++ b/src/plugins/media-export/rygel-media-export-harvester.vala
@@ -27,6 +27,7 @@ internal class Rygel.MediaExport.Harvester : GLib.Object {
     private HashMap<File, HarvestingTask> tasks;
     private MetadataExtractor extractor;
     private RecursiveFileMonitor monitor;
+    private Regex file_filter;
 
     /**
      * Create a new instance of the meta-data extraction manager.
@@ -41,6 +42,7 @@ internal class Rygel.MediaExport.Harvester : GLib.Object {
         this.extractor = extractor;
         this.monitor = monitor;
         this.tasks = new HashMap<File, HarvestingTask> (file_hash, file_equal);
+        this.create_file_filter ();
     }
 
     /**
@@ -64,6 +66,7 @@ internal class Rygel.MediaExport.Harvester : GLib.Object {
 
         var task = new HarvestingTask (this.extractor,
                                        this.monitor,
+                                       this.file_filter,
                                        file,
                                        parent,
                                        flag);
@@ -99,4 +102,32 @@ internal class Rygel.MediaExport.Harvester : GLib.Object {
 
         this.tasks.remove (file);
     }
+
+    /**
+     * 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;
+        }
+    }
 }
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 8240da5..b790224 100644
--- a/src/plugins/media-export/rygel-media-export-harvesting-task.vala
+++ b/src/plugins/media-export/rygel-media-export-harvesting-task.vala
@@ -43,6 +43,7 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine, GLib.Object
 
     public HarvestingTask (MetadataExtractor    extractor,
                            RecursiveFileMonitor monitor,
+                           Regex                file_filter,
                            File                 file,
                            MediaContainer       parent,
                            string?              flag = null) {
@@ -64,25 +65,7 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine, GLib.Object
         this.monitor = monitor;
         this.cancellable = new Cancellable ();
         this.flag = flag;
-        var config = MetaConfig.get_default ();
-
-        try {
-            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);
-            file_filter = new Regex ("(%s)$".printf (list),
-                                     RegexCompileFlags.CASELESS |
-                                     RegexCompileFlags.OPTIMIZE);
-        } catch (Error error) {
-            file_filter = null;
-        }
+        this.file_filter = file_filter;
     }
 
     /**



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]