[rygel] media-export: Don't keep empty containers in DB
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] media-export: Don't keep empty containers in DB
- Date: Mon, 21 Feb 2011 20:46:48 +0000 (UTC)
commit e1edff6d41e6e57643e340b014f8f32f15e38e77
Author: Jens Georg <mail jensge org>
Date: Sat Feb 12 23:27:06 2011 +0100
media-export: Don't keep empty containers in DB
.../media-export/rygel-media-export-harvester.vala | 47 ++++++++++++++------
.../rygel-media-export-harvesting-task.vala | 12 +++++-
2 files changed, 44 insertions(+), 15 deletions(-)
---
diff --git a/src/plugins/media-export/rygel-media-export-harvester.vala b/src/plugins/media-export/rygel-media-export-harvester.vala
index a1f7013..0f92646 100644
--- a/src/plugins/media-export/rygel-media-export-harvester.vala
+++ b/src/plugins/media-export/rygel-media-export-harvester.vala
@@ -147,13 +147,21 @@ internal class Rygel.MediaExport.Harvester : GLib.Object {
debug ("Trying to harvest %s because of %s",
file.get_uri (),
event.to_string ());
- var id = MediaCache.get_id (file.get_parent ());
+ string id;
try {
- var parent_container = cache.get_object (id)
- as MediaContainer;
- assert (parent_container != null);
-
- this.schedule (file, parent_container);
+ MediaContainer parent_container = null;
+ var current = file;
+ do {
+ var parent = current.get_parent ();
+ id = MediaCache.get_id (parent);
+ parent_container = cache.get_object (id)
+ as MediaContainer;
+ if (parent_container == null) {
+ current = parent;
+ }
+ } while (parent_container == null);
+
+ this.schedule (current, parent_container);
} catch (DatabaseError error) {
warning (_("Error fetching object '%s' from database: %s"),
id,
@@ -168,15 +176,26 @@ internal class Rygel.MediaExport.Harvester : GLib.Object {
// 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 ();
+ var object = cache.get_object (id);
+ var parent = object.parent;
+
+ while (object != null) {
+ parent = object.parent;
+ cache.remove_object (object);
+ if (parent == null) {
+ break;
+ }
+
+ parent.child_count--;
+ if (parent.child_count != 0) {
+ break;
}
+
+ object = parent;
+ }
+
+ if (parent != null) {
+ parent.updated ();
}
} catch (Error error) {
warning (_("Error removing object from database: %s"),
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 86c155c..7c52abd 100644
--- a/src/plugins/media-export/rygel-media-export-harvesting-task.vala
+++ b/src/plugins/media-export/rygel-media-export-harvesting-task.vala
@@ -272,6 +272,8 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine,
this.flag);
} catch (Error error) {};
}
+ parent.updated ();
+
this.completed ();
}
@@ -351,7 +353,15 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine,
private void do_update () {
if (this.files.size == 0 &&
this.containers.get_length () != 0) {
- this.containers.peek_head ().updated ();
+ var container = this.containers.peek_head ();
+ try {
+ var cache = MediaCache.get_default ();
+ if (cache.get_child_count (container.id) > 0) {
+ this.containers.peek_head ().updated ();
+ } else {
+ cache.remove_by_id (container.id);
+ }
+ } catch (Error error) { }
this.containers.pop_head ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]