[rygel] core: get rid of parentless media item



commit a53371cef90e32f1ce1e195ffdfd547fd37c8575
Author: Jens Georg <mail jensge org>
Date:   Wed Jun 24 21:58:05 2009 +0200

    core: get rid of parentless media item

 src/rygel/rygel-media-db-object-factory.vala |    3 ++-
 src/rygel/rygel-media-db.vala                |   19 ++++++++++++++-----
 src/rygel/rygel-media-object.vala            |    1 +
 3 files changed, 17 insertions(+), 6 deletions(-)
---
diff --git a/src/rygel/rygel-media-db-object-factory.vala b/src/rygel/rygel-media-db-object-factory.vala
index b655d89..a05a980 100644
--- a/src/rygel/rygel-media-db-object-factory.vala
+++ b/src/rygel/rygel-media-db-object-factory.vala
@@ -61,9 +61,10 @@ public class Rygel.MediaDBObjectFactory : Object {
      * @param upnp_class upnp_class of the item
      */
     public virtual MediaItem get_item (Rygel.MediaDB media_db,
+                                       MediaContainer parent,
                                        string id,
                                        string title,
                                        string upnp_class) {
-        return new MediaItem (id, null, title, upnp_class);
+        return new MediaItem (id, parent, title, upnp_class);
     }
 }
diff --git a/src/rygel/rygel-media-db.vala b/src/rygel/rygel-media-db.vala
index 0012380..1241358 100644
--- a/src/rygel/rygel-media-db.vala
+++ b/src/rygel/rygel-media-db.vala
@@ -95,7 +95,8 @@ public class Rygel.MediaDB : Object {
             "Meta_Data.class, Meta_Data.author, Meta_Data.album, " +
             "Meta_Data.date, Meta_Data.bitrate, Meta_Data.sample_freq, " +
             "Meta_Data.bits_per_sample, Meta_Data.channels, " +
-            "Meta_Data.track, Meta_Data.color_depth, Meta_Data.duration " +
+            "Meta_Data.track, Meta_Data.color_depth, Meta_Data.duration, " +
+            "Object.parent " +
     "FROM Object LEFT OUTER JOIN Meta_Data " +
         "ON Object.metadata_fk = Meta_Data.id WHERE Object.upnp_id = ?";
 
@@ -106,7 +107,7 @@ public class Rygel.MediaDB : Object {
             "Meta_Data.date, Meta_Data.bitrate, Meta_Data.sample_freq, " +
             "Meta_Data.bits_per_sample, Meta_Data.channels, " +
             "Meta_Data.track, Meta_Data.color_depth, Meta_Data.duration, " +
-            "upnp_id " +
+            "upnp_id, Object.parent " +
     "FROM Object LEFT OUTER JOIN Meta_Data " +
         "ON Object.metadata_fk = Meta_Data.id " +
     "WHERE Object.parent = ? " +
@@ -367,7 +368,7 @@ public class Rygel.MediaDB : Object {
         }
     }
 
-    private MediaObject? get_object_from_statement (string object_id, Statement statement) {
+    private MediaObject? get_object_from_statement (MediaContainer? parent, string object_id, Statement statement) {
         MediaObject obj = null;
         switch (statement.column_int (0)) {
             case 0:
@@ -380,6 +381,7 @@ public class Rygel.MediaDB : Object {
             case 1:
                 // this is an item
                 obj = factory.get_item (this,
+                        parent,
                         object_id,
                         statement.column_text (1),
                         statement.column_text (6));
@@ -408,7 +410,10 @@ public class Rygel.MediaDB : Object {
         if (rc == Sqlite.OK) {
             statement.bind_text (1, object_id);
             while ((rc = statement.step ()) == Sqlite.ROW) {
-                obj = get_object_from_statement (object_id, statement);
+                var parent = get_object (statement.column_text (17));
+                obj = get_object_from_statement ((MediaContainer)parent, object_id, statement);
+                obj.parent_ref = (MediaContainer)parent;
+                obj.parent = obj.parent_ref;
                 break;
             }
         } else {
@@ -475,7 +480,11 @@ public class Rygel.MediaDB : Object {
             statement.bind_int64 (3, (int64)max_count);
             while ((rc = statement.step ()) == Sqlite.ROW) {
                 var child_id = statement.column_text (17);
-                children.add (get_object_from_statement (child_id, statement));
+                var parent = get_object (statement.column_text (18));
+                children.add (get_object_from_statement
+                ((MediaContainer)parent, child_id, statement));
+                children[children.size - 1].parent = (MediaContainer)parent;
+                children[children.size - 1].parent_ref = (MediaContainer)parent;
             }
         }
 
diff --git a/src/rygel/rygel-media-object.vala b/src/rygel/rygel-media-object.vala
index c2adcf6..d6b1b9b 100644
--- a/src/rygel/rygel-media-object.vala
+++ b/src/rygel/rygel-media-object.vala
@@ -41,6 +41,7 @@ public abstract class Rygel.MediaObject : GLib.Object {
     // mandatory.
     public unowned MediaContainer parent;
     public MediaContainer parent_ref;
+
     construct {
         uris = new ArrayList<string> ();
     }



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