[rygel] core: add update methods
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [rygel] core: add update methods
- Date: Wed, 9 Sep 2009 20:39:07 +0000 (UTC)
commit 8465d9a40aa9de42f19135dd00765b24e37fec40
Author: Jens Georg <mail jensge org>
Date: Sun Jun 28 03:21:48 2009 +0200
core: add update methods
src/rygel/rygel-media-db.vala | 85 ++++++++++++++++++++++++++++++++++++++--
1 files changed, 80 insertions(+), 5 deletions(-)
---
diff --git a/src/rygel/rygel-media-db.vala b/src/rygel/rygel-media-db.vala
index ef4f0fa..750e7ec 100644
--- a/src/rygel/rygel-media-db.vala
+++ b/src/rygel/rygel-media-db.vala
@@ -72,7 +72,8 @@ public class Rygel.MediaDB : Object {
"upnp_id TEXT PRIMARY KEY, " +
"type_fk INTEGER CONSTRAINT type_fk_id " +
"REFERENCES Object_Type(id), " +
- "title TEXT NOT NULL);" +
+ "title TEXT NOT NULL, " +
+ "timestamp INTEGER NOT NULL);" +
"CREATE TABLE Uri (object_fk TEXT " +
"CONSTRAINT object_fk_id REFERENCES Object(upnp_id) "+
"ON DELETE CASCADE, " +
@@ -111,13 +112,27 @@ public class Rygel.MediaDB : Object {
"track, color_depth, duration, object_fk) VALUES " +
"(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
+ private const string UPDATE_META_DATA_STRING =
+ "UPDATE Meta_Data SET " +
+ "size = ?, mime_type = ?, width = ?, height = ?, class = ?, " +
+ "author = ?, album = ?, date = ?, bitrate = ?, " +
+ "sample_freq = ?, bits_per_sample = ?, channels = ?, " +
+ "track = ?, color_depth = ?, duration = ? " +
+ "WHERE object_fk = ?";
+
private const string INSERT_OBJECT_STRING =
"INSERT INTO Object (upnp_id, title, type_fk, parent) " +
"VALUES (?,?,?,?)";
+ private const string UPDATE_OBJECT_STRING =
+ "UPDATE Object SET title = ? WHERE upnp_id = ?";
+
private const string INSERT_URI_STRING =
"INSERT INTO Uri (object_fk, uri) VALUES (?,?)";
+ private const string DELETE_URI_STRING =
+ "DELETE FROM Uri WHERE object_fk = ?";
+
private const string GET_OBJECT_STRING =
"SELECT type_fk, title, Meta_Data.size, Meta_Data.mime_type, " +
"Meta_Data.width, Meta_Data.height, " +
@@ -301,7 +316,7 @@ public class Rygel.MediaDB : Object {
}
}
- public void save_container (MediaContainer container) throws Error {
+ private void save_container (MediaContainer container) throws Error {
var rc = db.exec ("BEGIN");
try {
create_object (container);
@@ -312,7 +327,7 @@ public class Rygel.MediaDB : Object {
}
}
- public void save_item (MediaItem item) throws Error {
+ private void save_item (MediaItem item) throws Error {
var rc = db.exec ("BEGIN;");
try {
save_metadata (item);
@@ -330,9 +345,69 @@ public class Rygel.MediaDB : Object {
}
}
- private void save_metadata (MediaItem item) throws Error {
+ public signal void item_updated (string item_id);
+
+ public void update_object (MediaObject obj) {
+ var rc = db.exec ("BEGIN");
+ try {
+ delete_uris (obj);
+ if (obj is MediaItem) {
+ save_metadata ((MediaItem)obj, UPDATE_META_DATA_STRING);
+ }
+ update_object_internal (obj);
+ save_uris (obj);
+ rc = db.exec ("COMMIT");
+ if (rc == Sqlite.OK) {
+ item_updated (obj.id);
+ }
+ } catch (Error error) {
+ warning ("Failed to add item with id %s: %s",
+ obj.id,
+ error.message);
+ rc = db.exec ("ROLLBACK");
+ }
+ }
+
+ private void update_object_internal (MediaObject obj) throws Error {
+ Statement statement;
+ var rc = db.prepare_v2 (UPDATE_OBJECT_STRING,
+ -1,
+ out statement,
+ null);
+ if (rc == Sqlite.OK) {
+ statement.bind_text (1, obj.title);
+ statement.bind_text (2, obj.id);
+ rc = statement.step ();
+ if (rc != Sqlite.DONE && rc != Sqlite.OK) {
+ throw new MediaDBError.SQLITE_ERROR (db.errmsg ());
+ }
+ } else {
+ throw new MediaDBError.SQLITE_ERROR (db.errmsg ());
+ }
+ }
+
+ private void delete_uris (MediaObject obj) throws Error {
+ Statement statement;
+ var rc = db.prepare_v2 (DELETE_URI_STRING,
+ -1,
+ out statement,
+ null);
+ if (rc == Sqlite.OK) {
+ statement.bind_text (1, obj.id);
+ rc = statement.step ();
+ if (rc != Sqlite.DONE && rc != Sqlite.OK) {
+ throw new MediaDBError.SQLITE_ERROR (db.errmsg ());
+ }
+ } else {
+ throw new MediaDBError.SQLITE_ERROR (db.errmsg ());
+ }
+ }
+
+ private void save_metadata (MediaItem item,
+ string sql = INSERT_META_DATA_STRING)
+ throws Error {
Statement statement;
- var rc = db.prepare_v2 (INSERT_META_DATA_STRING,
+ var rc = db.prepare_v2 (sql,
-1,
out statement,
null);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]