[rygel] media-export: Cancel harvester before starting new one
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] media-export: Cancel harvester before starting new one
- Date: Tue, 23 Feb 2010 13:31:29 +0000 (UTC)
commit a64f9be97834f5217f10665394ac02e09115b3a8
Author: Jens Georg <mail jensge org>
Date: Sat Feb 20 17:26:13 2010 +0100
media-export: Cancel harvester before starting new one
When uploading or changing files, multiple CHANGES_DONE event hints may be
sent. With this commit the already running harvester is cancelled and a
new one is started on this occasion.
.../rygel-media-export-root-container.vala | 39 +++++++++++++-------
1 files changed, 26 insertions(+), 13 deletions(-)
---
diff --git a/src/plugins/media-export/rygel-media-export-root-container.vala b/src/plugins/media-export/rygel-media-export-root-container.vala
index 20a80e5..12b94c7 100644
--- a/src/plugins/media-export/rygel-media-export-root-container.vala
+++ b/src/plugins/media-export/rygel-media-export-root-container.vala
@@ -54,6 +54,7 @@ public class Rygel.MediaExportRootContainer : Rygel.MediaDBContainer {
private MediaExportRecursiveFileMonitor monitor;
private MediaExportDBusService service;
private MediaExportDynamicContainer dynamic_elements;
+ private Gee.List<MediaExportHarvester> harvester_trash;
private static MediaContainer instance = null;
@@ -150,6 +151,7 @@ public class Rygel.MediaExportRootContainer : Rygel.MediaDBContainer {
this.harvester = new HashMap<File,MediaExportHarvester> (file_hash,
file_equal);
+ this.harvester_trash = new ArrayList<MediaExportHarvester> ();
this.monitor = new MediaExportRecursiveFileMonitor (null);
this.monitor.changed.connect (this.on_file_changed);
@@ -209,31 +211,40 @@ public class Rygel.MediaExportRootContainer : Rygel.MediaDBContainer {
this.updated ();
}
- private void on_file_harvested (File file) {
+ private void on_file_harvested (MediaExportHarvester harvester,
+ File file) {
message ("'%s' harvested", file.get_uri ());
this.harvester.remove (file);
}
+ private void on_remove_cancelled_harvester (MediaExportHarvester harvester,
+ File file) {
+ this.harvester_trash.remove (harvester);
+ }
+
private void harvest (File file, MediaContainer parent = this) {
if (this.extractor == null) {
warning ("No Metadata extractor available. Will not crawl");
return;
}
- if (!this.harvester.contains (file)) {
- var harvester = new MediaExportHarvester (parent,
- this.media_db,
- this.extractor,
- this.monitor);
- harvester.harvested.connect (this.on_file_harvested);
- this.harvester[file] = harvester;
- harvester.harvest (file);
- } else {
- warning ("%s already scheduled for harvesting. Check config " +
- "for duplicates.",
- file.get_uri ());
+ if (this.harvester.contains (file)) {
+ debug ("Already harvesting; cancelling");
+ var harvester = this.harvester[file];
+ harvester.harvested.disconnect (this.on_file_harvested);
+ harvester.cancellable.cancel ();
+ harvester.harvested.connect (this.on_remove_cancelled_harvester);
+ this.harvester_trash.add (harvester);
}
+
+ var harvester = new MediaExportHarvester (parent,
+ this.media_db,
+ this.extractor,
+ this.monitor);
+ harvester.harvested.connect (this.on_file_harvested);
+ this.harvester[file] = harvester;
+ harvester.harvest (file);
}
private void on_file_changed (File file,
@@ -242,6 +253,8 @@ public class Rygel.MediaExportRootContainer : Rygel.MediaDBContainer {
switch (event) {
case FileMonitorEvent.CREATED:
case FileMonitorEvent.CHANGES_DONE_HINT:
+ debug ("Trying to harvest %s because of %d", file.get_uri (),
+ event);
var parent = file.get_parent ();
var id = Checksum.compute_for_string (ChecksumType.MD5,
parent.get_uri ());
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]