[rygel/wip/track-changes: 32/34] media-export: Persist change tracking properties



commit f48173dfbf587d817903dff7df8851cd8123cfac
Author: Jens Georg <jensg openismus com>
Date:   Tue Dec 11 20:08:19 2012 +0100

    media-export: Persist change tracking properties

 .../rygel-media-export-dummy-container.vala        |   10 +++++++---
 .../media-export/rygel-media-export-harvester.vala |    1 +
 .../rygel-media-export-harvesting-task.vala        |   20 ++++++++++++++++++--
 .../rygel-media-export-music-item.vala             |    2 +-
 .../rygel-media-export-photo-item.vala             |    2 +-
 .../rygel-media-export-playlist-item.vala          |    2 +-
 .../rygel-media-export-video-item.vala             |    2 ++
 7 files changed, 31 insertions(+), 8 deletions(-)
---
diff --git a/src/plugins/media-export/rygel-media-export-dummy-container.vala b/src/plugins/media-export/rygel-media-export-dummy-container.vala
index 50c68d3..4e2f29f 100644
--- a/src/plugins/media-export/rygel-media-export-dummy-container.vala
+++ b/src/plugins/media-export/rygel-media-export-dummy-container.vala
@@ -19,14 +19,18 @@
  */
 using Gee;
 
-internal class Rygel.MediaExport.DummyContainer : NullContainer {
+internal class Rygel.MediaExport.DummyContainer : TrackableDbContainer {
     public File file;
     public Gee.List<string> children;
 
     public DummyContainer (File           file,
                            MediaContainer parent) {
-        this.id = MediaCache.get_id (file);
-        this.title = file.get_basename ();
+        MediaCache cache = null;
+        try {
+            cache = MediaCache.get_default ();
+        } catch (Error error) { }
+
+        base (cache, MediaCache.get_id (file), file.get_basename ());
         this.parent_ref = parent;
         this.file = file;
         this.uris.add (file.get_uri ());
diff --git a/src/plugins/media-export/rygel-media-export-harvester.vala b/src/plugins/media-export/rygel-media-export-harvester.vala
index 6fe6815..dac9a75 100644
--- a/src/plugins/media-export/rygel-media-export-harvester.vala
+++ b/src/plugins/media-export/rygel-media-export-harvester.vala
@@ -234,6 +234,7 @@ internal class Rygel.MediaExport.Harvester : GLib.Object {
 
             if (parent != null) {
                 parent.updated ();
+                cache.save_container (parent);
             }
         } 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 0413222..6bc32d5 100644
--- a/src/plugins/media-export/rygel-media-export-harvesting-task.vala
+++ b/src/plugins/media-export/rygel-media-export-harvesting-task.vala
@@ -287,6 +287,9 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine,
                 } catch (Error error) {};
             }
             parent.updated (parent);
+            try {
+                this.cache.save_container (parent);
+            } catch (Error error) { }
 
             this.completed ();
         }
@@ -322,11 +325,18 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine,
 
         if (item != null) {
             item.parent_ref = this.containers.peek_head ();
+            // This is only necessary to generate the poper <objAdd LastChange
+            // entry
             if (entry.known) {
                 (item as UpdatableObject).commit.begin ();
             } else {
                 var container = item.parent as TrackableContainer;
-                container.add_child_tracked.begin (item);
+                container.add_child_tracked.begin (item, () => {
+                    // save again to make sure we persist the update count
+                    try {
+                        cache.save_item (item);
+                    } catch (Error error) { }
+                }) ;
             }
         }
 
@@ -368,8 +378,14 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine,
                 if (cache.get_child_count (container.id) > 0) {
                     var head = this.containers.peek_head ();
                     head.updated (head);
+                    cache.save_container (head);
                 } else {
-                    cache.remove_by_id (container.id);
+                    var parent = container.parent as TrackableContainer;
+                    parent.remove_child_tracked.begin (container, () => {
+                        try {
+                            MediaCache.get_default ().save_container (parent);
+                        } catch (Error error) { }
+                    });
                 }
             } catch (Error error) { }
             this.containers.pop_head ();
diff --git a/src/plugins/media-export/rygel-media-export-music-item.vala b/src/plugins/media-export/rygel-media-export-music-item.vala
index 7f43c30..2ff0be3 100644
--- a/src/plugins/media-export/rygel-media-export-music-item.vala
+++ b/src/plugins/media-export/rygel-media-export-music-item.vala
@@ -37,9 +37,9 @@ internal class Rygel.MediaExport.MusicItem : Rygel.MusicItem,
     }
 
     public async void commit () throws Error {
+        this.changed ();
         var cache = MediaCache.get_default ();
         cache.save_item (this);
-        this.changed ();
     }
 
 }
diff --git a/src/plugins/media-export/rygel-media-export-photo-item.vala b/src/plugins/media-export/rygel-media-export-photo-item.vala
index ffa7e2c..9d7ad43 100644
--- a/src/plugins/media-export/rygel-media-export-photo-item.vala
+++ b/src/plugins/media-export/rygel-media-export-photo-item.vala
@@ -31,8 +31,8 @@ internal class Rygel.MediaExport.PhotoItem : Rygel.PhotoItem,
     }
 
     public async void commit () throws Error {
+        this.changed ();
         var cache = MediaCache.get_default ();
         cache.save_item (this);
-        this.changed ();
     }
 }
diff --git a/src/plugins/media-export/rygel-media-export-playlist-item.vala b/src/plugins/media-export/rygel-media-export-playlist-item.vala
index 0b5de8e..6d94cae 100644
--- a/src/plugins/media-export/rygel-media-export-playlist-item.vala
+++ b/src/plugins/media-export/rygel-media-export-playlist-item.vala
@@ -35,9 +35,9 @@ internal class Rygel.MediaExport.PlaylistItem : Rygel.PlaylistItem,
     }
 
     public async void commit () throws Error {
+        this.changed ();
         var cache = MediaCache.get_default ();
         cache.save_item (this);
-        this.changed ();
     }
 
 }
diff --git a/src/plugins/media-export/rygel-media-export-video-item.vala b/src/plugins/media-export/rygel-media-export-video-item.vala
index e22213d..18e5fcd 100644
--- a/src/plugins/media-export/rygel-media-export-video-item.vala
+++ b/src/plugins/media-export/rygel-media-export-video-item.vala
@@ -21,6 +21,7 @@
  */
 
 internal class Rygel.MediaExport.VideoItem : Rygel.VideoItem,
+                                             Rygel.TrackableItem,
                                              Rygel.UpdatableObject {
     public VideoItem (string         id,
                       MediaContainer parent,
@@ -30,6 +31,7 @@ internal class Rygel.MediaExport.VideoItem : Rygel.VideoItem,
     }
 
     public async void commit () throws Error {
+        this.changed ();
         var cache = MediaCache.get_default ();
         cache.save_item (this);
     }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]