summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2012-09-17 13:43:48 +0200
committerJens Georg <mail@jensge.org>2012-09-18 16:41:21 +0200
commitbbfd9b6a909065f57fbca58d22a7ad0821be534b (patch)
tree797112ef039f2ef073eeb102ae3b4251465633bc /src
parent5354888dea9db753f3d33d327171b6f008fae13a (diff)
downloadrygel-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.vala45
-rw-r--r--src/plugins/media-export/rygel-media-export-harvesting-task.vala15
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;
}
}