[rygel/wip/track-changes: 23/34] media-export: Persist ServiceResetToken
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel/wip/track-changes: 23/34] media-export: Persist ServiceResetToken
- Date: Tue, 11 Dec 2012 20:09:52 +0000 (UTC)
commit ace6f922f8b091aea7e57988a3331a58df70f48a
Author: Jens Georg <jensg openismus com>
Date: Thu Dec 6 14:10:56 2012 +0100
media-export: Persist ServiceResetToken
src/plugins/media-export/Makefile.am | 1 +
.../rygel-media-export-media-cache-upgrader.vala | 21 +++++++++++++++++
.../rygel-media-export-media-cache.vala | 24 ++++++++++++++++++++
.../rygel-media-export-root-container.vala | 20 +++++++++++++++-
.../rygel-media-export-sql-factory.vala | 11 +++++++-
5 files changed, 74 insertions(+), 3 deletions(-)
---
diff --git a/src/plugins/media-export/Makefile.am b/src/plugins/media-export/Makefile.am
index 5ef84c4..013f42c 100644
--- a/src/plugins/media-export/Makefile.am
+++ b/src/plugins/media-export/Makefile.am
@@ -48,6 +48,7 @@ librygel_media_export_la_VALAFLAGS = \
--pkg gstreamer-tag-1.0 \
--pkg gstreamer-app-1.0 \
--pkg sqlite3 \
+ --pkg uuid \
$(RYGEL_COMMON_SERVER_PLUGIN_VALAFLAGS)
librygel_media_export_la_LIBADD = \
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 c1f540e..47d6c10 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
@@ -110,6 +110,9 @@ internal class Rygel.MediaExport.MediaCacheUpgrader {
case 10:
update_v10_v11 ();
break;
+ case 11:
+ update_v11_v12 ();
+ break;
default:
warning ("Cannot upgrade");
database = null;
@@ -365,4 +368,22 @@ internal class Rygel.MediaExport.MediaCacheUpgrader {
database = null;
}
}
+
+ private void update_v11_v12 () {
+ try {
+ this.database.begin ();
+ this.database.exec ("ALTER TABLE schema_info " +
+ "ADD COLUMN reset_token TEXT");
+ this.database.exec ("UPDATE schema_info SET reset_token = '" +
+ UUID.get () + "'");
+ this.database.exec ("UPDATE schema_info SET version = '12'");
+ 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 a07584c..6b2f537 100644
--- a/src/plugins/media-export/rygel-media-export-media-cache.vala
+++ b/src/plugins/media-export/rygel-media-export-media-cache.vala
@@ -430,6 +430,29 @@ public class Rygel.MediaExport.MediaCache : Object {
return uris;
}
+ public string get_reset_token () {
+ try {
+ var cursor = this.exec_cursor (SQLString.RESET_TOKEN);
+ var statement = cursor.next ();
+
+ return statement->column_text (0);
+ } catch (DatabaseError error) {
+ warning ("Failed to get reset token");
+
+ return UUID.get ();
+ }
+ }
+
+ public void save_reset_token (string token) {
+ try {
+ GLib.Value[] args = { token };
+
+ this.db.exec ("UPDATE schema_info SET reset_token = ?", args);
+ } catch (DatabaseError error) {
+ warning ("Failed to persist ServiceResetToken: %s", error.message);
+ }
+ }
+
// Private functions
private void get_exists_cache () throws DatabaseError {
this.exists_cache = new HashMap<string, ExistsCacheEntry?> ();
@@ -602,6 +625,7 @@ public class Rygel.MediaExport.MediaCache : Object {
db.exec (this.sql.make (SQLString.TRIGGER_CLOSURE));
db.commit ();
db.analyze ();
+ this.save_reset_token (UUID.get ());
return true;
} catch (Error err) {
diff --git a/src/plugins/media-export/rygel-media-export-root-container.vala b/src/plugins/media-export/rygel-media-export-root-container.vala
index f3af66b..8bcbcfb 100644
--- a/src/plugins/media-export/rygel-media-export-root-container.vala
+++ b/src/plugins/media-export/rygel-media-export-root-container.vala
@@ -40,7 +40,8 @@ const Rygel.MediaExport.FolderDefinition[] VIRTUAL_FOLDERS_MUSIC = {
/**
* Represents the root container.
*/
-public class Rygel.MediaExport.RootContainer : Rygel.MediaExport.DBContainer {
+public class Rygel.MediaExport.RootContainer : Rygel.TrackableContainer,
+ Rygel.MediaExport.DBContainer {
private DBusService service;
private Harvester harvester;
private Cancellable cancellable;
@@ -190,7 +191,14 @@ public class Rygel.MediaExport.RootContainer : Rygel.MediaExport.DBContainer {
}
}
+ // TrackableContainer overrides
+ public string get_service_reset_token () {
+ return this.media_db.get_reset_token ();
+ }
+ public void set_service_reset_token (string token) {
+ this.media_db.save_reset_token (token);
+ }
private ArrayList<File> get_shared_uris () {
ArrayList<string> uris;
@@ -483,4 +491,14 @@ public class Rygel.MediaExport.RootContainer : Rygel.MediaExport.DBContainer {
container.updated ();
}
}
+
+ public async void add_child (MediaObject object) {
+ // TODO: Implement
+ assert_not_reached ();
+ }
+
+ public async void remove_child (MediaObject object) {
+ // TODO: Implement
+ assert_not_reached ();
+ }
}
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 a7a7b08..35e808c 100644
--- a/src/plugins/media-export/rygel-media-export-sql-factory.vala
+++ b/src/plugins/media-export/rygel-media-export-sql-factory.vala
@@ -69,6 +69,7 @@ internal enum Rygel.MediaExport.SQLString {
SCHEMA,
EXISTS_CACHE,
STATISTICS,
+ RESET_TOKEN
}
internal class Rygel.MediaExport.SQLFactory : Object {
@@ -161,7 +162,7 @@ internal class Rygel.MediaExport.SQLFactory : Object {
"WHERE _column IS NOT NULL %s ORDER BY _column COLLATE CASEFOLD " +
"LIMIT ?,?";
- internal const string SCHEMA_VERSION = "11";
+ internal const string SCHEMA_VERSION = "12";
internal const string CREATE_META_DATA_TABLE_STRING =
"CREATE TABLE meta_data (size INTEGER NOT NULL, " +
"mime_type TEXT NOT NULL, " +
@@ -186,7 +187,8 @@ internal class Rygel.MediaExport.SQLFactory : Object {
"ON DELETE CASCADE);";
private const string SCHEMA_STRING =
- "CREATE TABLE schema_info (version TEXT NOT NULL); " +
+ "CREATE TABLE schema_info (version TEXT NOT NULL, " +
+ "reset_token TEXT); " +
CREATE_META_DATA_TABLE_STRING +
"CREATE TABLE object (parent TEXT CONSTRAINT parent_fk_id " +
"REFERENCES Object(upnp_id), " +
@@ -254,6 +256,9 @@ internal class Rygel.MediaExport.SQLFactory : Object {
private const string STATISTICS_STRING =
"SELECT class, count(1) FROM meta_data GROUP BY class";
+ private const string RESET_TOKEN_STRING =
+ "SELECT reset_token FROM schema_info";
+
public unowned string make (SQLString query) {
switch (query) {
case SQLString.SAVE_METADATA:
@@ -298,6 +303,8 @@ internal class Rygel.MediaExport.SQLFactory : Object {
return CREATE_CLOSURE_TABLE;
case SQLString.STATISTICS:
return STATISTICS_STRING;
+ case SQLString.RESET_TOKEN:
+ return RESET_TOKEN_STRING;
default:
assert_not_reached ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]