[rygel] media-export: Move file handling to harvester
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] media-export: Move file handling to harvester
- Date: Sat, 14 Aug 2010 23:32:15 +0000 (UTC)
commit 0e4f37d82fd525f83d423a4f7a01f729d9fee51c
Author: Jens Georg <mail jensge org>
Date: Mon Aug 2 22:57:39 2010 +0300
media-export: Move file handling to harvester
Reacting to changes is now also done in the Harvester class. No more
filesystem stuff in root container
.../media-export/rygel-media-export-harvester.vala | 61 +++++++++++++++++++-
.../rygel-media-export-root-container.vala | 54 +-----------------
2 files changed, 59 insertions(+), 56 deletions(-)
---
diff --git a/src/plugins/media-export/rygel-media-export-harvester.vala b/src/plugins/media-export/rygel-media-export-harvester.vala
index d77d89f..754263c 100644
--- a/src/plugins/media-export/rygel-media-export-harvester.vala
+++ b/src/plugins/media-export/rygel-media-export-harvester.vala
@@ -37,10 +37,13 @@ internal class Rygel.MediaExport.Harvester : GLib.Object {
* @param monitor intance of a RecursiveFileMonitor which is used to keep
* track of the file changes
*/
- public Harvester (MetadataExtractor extractor,
- RecursiveFileMonitor monitor) {
+ public Harvester (MetadataExtractor extractor) {
this.extractor = extractor;
- this.monitor = monitor;
+ this.monitor = new RecursiveFileMonitor (null);
+ if (this.monitor != null) {
+ this.monitor.changed.connect (this.on_file_changed);
+ }
+
this.tasks = new HashMap<File, HarvestingTask> (file_hash, file_equal);
this.create_file_filter ();
}
@@ -130,4 +133,56 @@ internal class Rygel.MediaExport.Harvester : GLib.Object {
this.file_filter = null;
}
}
+
+ private void on_file_changed (File file,
+ File? other,
+ FileMonitorEvent event) {
+ try {
+ var cache = MediaCache.get_default ();
+ switch (event) {
+ case FileMonitorEvent.CREATED:
+ case FileMonitorEvent.CHANGES_DONE_HINT:
+ debug (_("Trying to harvest %s because of %d"),
+ file.get_uri (),
+ event);
+ var id = MediaCache.get_id (file.get_parent ());
+ try {
+ var parent_container = cache.get_object (id)
+ as MediaContainer;
+ assert (parent_container != null);
+
+ this.schedule (file, parent_container);
+ } catch (DatabaseError error) {
+ warning (_("Error fetching object '%s' from database: %s"),
+ id,
+ error.message);
+ }
+ break;
+ case FileMonitorEvent.DELETED:
+ this.cancel (file);
+ try {
+ // the full object is fetched instead of simply calling
+ // exists because we need the parent to signalize the
+ // change
+ var id = MediaCache.get_id (file);
+ var obj = cache.get_object (id);
+
+ // it may be that files removed are files that are not
+ // in the database, because they're not media files
+ if (obj != null) {
+ cache.remove_object (obj);
+ if (obj.parent != null) {
+ obj.parent.updated ();
+ }
+ }
+ } catch (Error error) {
+ warning (_("Error removing object from database: %s"),
+ error.message);
+ }
+ break;
+ default:
+ break;
+ }
+ } catch (Error error) { }
+ }
}
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 7caceb2..4b50150 100644
--- a/src/plugins/media-export/rygel-media-export-root-container.vala
+++ b/src/plugins/media-export/rygel-media-export-root-container.vala
@@ -26,7 +26,6 @@ using GUPnP;
*/
public class Rygel.MediaExport.RootContainer : Rygel.MediaExport.DBContainer {
private MetadataExtractor extractor;
- private RecursiveFileMonitor monitor;
private DBusService service;
private Harvester harvester;
@@ -266,10 +265,7 @@ public class Rygel.MediaExport.RootContainer : Rygel.MediaExport.DBContainer {
base (db, "0", "MediaExportRoot");
this.extractor = new MetadataExtractor ();
- this.monitor = new RecursiveFileMonitor (null);
- this.monitor.changed.connect (this.on_file_changed);
-
- this.harvester = new Harvester (this.extractor, this.monitor);
+ this.harvester = new Harvester (this.extractor);
try {
this.service = new DBusService (this);
@@ -341,52 +337,4 @@ public class Rygel.MediaExport.RootContainer : Rygel.MediaExport.DBContainer {
this.updated ();
}
- private void on_file_changed (File file,
- File? other,
- FileMonitorEvent event) {
- switch (event) {
- case FileMonitorEvent.CREATED:
- case FileMonitorEvent.CHANGES_DONE_HINT:
- debug (_("Trying to harvest %s because of %d"),
- file.get_uri (),
- event);
- try {
- var id = MediaCache.get_id (file.get_parent ());
- var parent_container = this.media_db.get_object (id)
- as MediaContainer;
- assert (parent_container != null);
-
- this.harvester.schedule (file, parent_container);
- } catch (DatabaseError error) {
- warning (_("Error fetching object '%s' from database: %s"),
- id,
- error.message);
- }
- break;
- case FileMonitorEvent.DELETED:
- this.harvester.cancel (file);
- try {
- // the full object is fetched instead of simply calling
- // exists because we need the parent to signalize the
- // change
- var id = MediaCache.get_id (file);
- var obj = this.media_db.get_object (id);
-
- // it may be that files removed are files that are not
- // in the database, because they're not media files
- if (obj != null) {
- this.media_db.remove_object (obj);
- if (obj.parent != null) {
- obj.parent.updated ();
- }
- }
- } catch (Error error) {
- warning (_("Error removing object from database: %s"),
- error.message);
- }
- break;
- default:
- break;
- }
- }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]