[rygel] media-export: Remove container-search hack
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] media-export: Remove container-search hack
- Date: Tue, 20 Aug 2013 15:55:01 +0000 (UTC)
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]