[rygel] media-export: Remove container-search hack



commit cd76ae5f545c5489f2dcd35486ba0a994add947d
Author: Jens Georg <jensg openismus com>
Date:   Sat Aug 17 09:04:44 2013 +0200

    media-export: Remove container-search hack
    
    https://bugzilla.gnome.org/show_bug.cgi?id=706059

 .../rygel-media-export-media-cache-upgrader.vala   |   24 ++++++++-
 .../rygel-media-export-media-cache.vala            |   57 ++++++++++++-------
 .../rygel-media-export-sql-factory.vala            |    2 +-
 3 files changed, 60 insertions(+), 23 deletions(-)
---
diff --git a/src/plugins/media-export/rygel-media-export-media-cache-upgrader.vala 
b/src/plugins/media-export/rygel-media-export-media-cache-upgrader.vala
index c8eade2..aea5075 100644
--- a/src/plugins/media-export/rygel-media-export-media-cache-upgrader.vala
+++ b/src/plugins/media-export/rygel-media-export-media-cache-upgrader.vala
@@ -123,7 +123,10 @@ internal class Rygel.MediaExport.MediaCacheUpgrader {
                     this.update_v13_v14 ();
                     break;
                 case 14:
-                    this.update_v14_v15();
+                    this.update_v14_v15 ();
+                    break;
+                case 15:
+                    this.update_v15_v16 ();
                     break;
                 default:
                     warning ("Cannot upgrade");
@@ -520,4 +523,23 @@ internal class Rygel.MediaExport.MediaCacheUpgrader {
             database = null;
         }
     }
+
+    private void update_v15_v16 () {
+        try {
+            this.database.begin ();
+            this.database.exec ("INSERT INTO meta_data (size, mime_type, " +
+                                "class, object_fk) SELECT 0, " +
+                                "'inode/directory', 'object.container', " +
+                                "o.upnp_id FROM object AS o WHERE " +
+                                "o.type_fk=0;");
+            this.database.exec ("UPDATE schema_info SET version = '16'");
+            database.commit ();
+            database.exec ("VACUUM");
+            database.analyze ();
+        } catch (DatabaseError error) {
+            database.rollback ();
+            warning ("Database upgrade failed: %s", error.message);
+            database = null;
+        }
+    }
 }
diff --git a/src/plugins/media-export/rygel-media-export-media-cache.vala 
b/src/plugins/media-export/rygel-media-export-media-cache.vala
index 853c97a..e4c4eb7 100644
--- a/src/plugins/media-export/rygel-media-export-media-cache.vala
+++ b/src/plugins/media-export/rygel-media-export-media-cache.vala
@@ -106,7 +106,8 @@ public class Rygel.MediaExport.MediaCache : Object {
     public void save_container (MediaContainer container) throws Error {
         try {
             db.begin ();
-            create_object (container);
+            this.save_container_metadata (container);
+            this.create_object (container);
             db.commit ();
         } catch (DatabaseError error) {
             db.rollback ();
@@ -122,8 +123,8 @@ public class Rygel.MediaExport.MediaCache : Object {
                            bool override_guarded = false) throws Error {
         try {
             db.begin ();
-            save_metadata (item);
-            create_object (item, override_guarded);
+            this.save_item_metadata (item);
+            this.create_object (item, override_guarded);
             db.commit ();
         } catch (DatabaseError error) {
             warning (_("Failed to add item with ID %s: %s"),
@@ -665,7 +666,34 @@ public class Rygel.MediaExport.MediaCache : Object {
         }
     }
 
-    private void save_metadata (Rygel.MediaItem item) throws Error {
+    private void save_container_metadata (MediaContainer container) throws Error {
+        // Fill common properties
+        GLib.Value[] values = { 0,
+                                "inode/directory",
+                                -1,
+                                -1,
+                                container.upnp_class,
+                                Database.null (),
+                                Database.null (),
+                                Database.null (),
+                                -1,
+                                -1,
+                                -1,
+                                -1,
+                                -1,
+                                -1,
+                                -1,
+                                container.id,
+                                Database.null (),
+                                Database.null (),
+                                -1,
+                                Database.null ()};
+
+        this.db.exec (this.sql.make (SQLString.SAVE_METADATA), values);
+    }
+
+
+    private void save_item_metadata (Rygel.MediaItem item) throws Error {
         // Fill common properties
         GLib.Value[] values = { item.size,
                                 item.mime_type,
@@ -1097,16 +1125,9 @@ public class Rygel.MediaExport.MediaCache : Object {
             case SearchCriteriaOp.LEQ:
             case SearchCriteriaOp.GREATER:
             case SearchCriteriaOp.GEQ:
-                if (column == "m.class" &&
-                    exp.op == SearchCriteriaOp.EQ &&
-                    exp.operand2 == "object.container") {
-                    operator = new SqlOperator ("=", "o.type_fk");
-                    v = (int) ObjectType.CONTAINER;
-                } else {
-                    v = exp.operand2;
-                    operator = new SqlOperator.from_search_criteria_op
+                v = exp.operand2;
+                operator = new SqlOperator.from_search_criteria_op
                                             (exp.op, column, collate);
-                }
                 break;
             case SearchCriteriaOp.CONTAINS:
                 operator = new SqlFunction ("contains", column);
@@ -1117,14 +1138,8 @@ public class Rygel.MediaExport.MediaCache : Object {
                 v = exp.operand2;
                 break;
             case SearchCriteriaOp.DERIVED_FROM:
-                if (column == "m.class" &&
-                    exp.operand2.has_prefix("object.container")) {
-                    operator = new SqlOperator ("=", "o.type_fk");
-                    v = (int) ObjectType.CONTAINER;
-                } else {
-                    operator = new SqlOperator ("LIKE", column);
-                    v = "%s%%".printf (exp.operand2);
-                }
+                operator = new SqlOperator ("LIKE", column);
+                v = "%s%%".printf (exp.operand2);
                 break;
             default:
                 warning ("Unsupported op %d", exp.op);
diff --git a/src/plugins/media-export/rygel-media-export-sql-factory.vala 
b/src/plugins/media-export/rygel-media-export-sql-factory.vala
index 3aaff50..e74c811 100644
--- a/src/plugins/media-export/rygel-media-export-sql-factory.vala
+++ b/src/plugins/media-export/rygel-media-export-sql-factory.vala
@@ -188,7 +188,7 @@ internal class Rygel.MediaExport.SQLFactory : Object {
         "WHERE _column IS NOT NULL %s %s" +
     "LIMIT ?,?";
 
-    internal const string SCHEMA_VERSION = "15";
+    internal const string SCHEMA_VERSION = "16";
     internal const string CREATE_META_DATA_TABLE_STRING =
     "CREATE TABLE meta_data (size INTEGER NOT NULL, " +
                             "mime_type TEXT NOT NULL, " +


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