[rygel] media-export: Only build file-filter once
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] media-export: Only build file-filter once
- Date: Thu, 12 Aug 2010 15:19:39 +0000 (UTC)
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]