summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2015-07-05 15:42:54 +0200
committerJens Georg <mail@jensge.org>2015-07-05 16:51:58 +0200
commitf87f4249906dc197f4a8bf12950bfa2566d78ac2 (patch)
tree80afada88460989c8d77d1e1ed5baf06af1d907f /src
parentd1948b21f0ca9167ebafd671cba90c210d6d8500 (diff)
downloadrygel-f87f4249906dc197f4a8bf12950bfa2566d78ac2.tar.gz
media-export: Introduce blacklist table
Introduce database schema v17 Signed-off-by: Jens Georg <mail@jensge.org>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/media-export/rygel-media-export-media-cache-upgrader.vala19
-rw-r--r--src/plugins/media-export/rygel-media-export-sql-factory.vala33
2 files changed, 47 insertions, 5 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 6a4b21af..8e7f5587 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
@@ -128,8 +128,11 @@ internal class Rygel.MediaExport.MediaCacheUpgrader {
case 15:
this.update_v15_v16 ();
break;
+ case 16:
+ this.update_v16_v17 ();
+ break;
default:
- warning ("Cannot upgrade");
+ warning (_("Cannot upgrade from version %d"), old_version);
database = null;
break;
}
@@ -542,4 +545,18 @@ internal class Rygel.MediaExport.MediaCacheUpgrader {
database = null;
}
}
+
+ private void update_v16_v17 () {
+ try {
+ this.database.begin ();
+ this.database.exec (this.sql.make (SQLString.CREATE_BLACKLIST_TABLE));
+ this.database.exec (this.sql.make (SQLString.CREATE_BLACKLIST_INDEX));
+ this.database.exec ("VACUUM");
+ this.database.analyze ();
+ } catch (Database.DatabaseError error) {
+ database.rollback ();
+ warning (_("Database upgrade failed: %s"), error.message);
+ database = null;
+ }
+ }
}
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 e74c811f..accbf99d 100644
--- a/src/plugins/media-export/rygel-media-export-sql-factory.vala
+++ b/src/plugins/media-export/rygel-media-export-sql-factory.vala
@@ -79,7 +79,11 @@ internal enum Rygel.MediaExport.SQLString {
MAKE_GUARDED,
IS_GUARDED,
UPDATE_GUARDED_OBJECT,
- TRIGGER_REFERENCE
+ TRIGGER_REFERENCE,
+ CREATE_BLACKLIST_TABLE,
+ CREATE_BLACKLIST_INDEX,
+ ADD_TO_BLACKLIST,
+ CHECK_BLACKLIST
}
internal class Rygel.MediaExport.SQLFactory : Object {
@@ -169,6 +173,13 @@ internal class Rygel.MediaExport.SQLFactory : Object {
"LEFT OUTER JOIN meta_data m " +
"ON o.upnp_id = m.object_fk %s";
+ private const string CHECK_BLACKLIST_STRING =
+ "SELECT COUNT(1) FROM blacklist b " +
+ "WHERE b.uri = ?";
+
+ private const string ADD_TO_BLACKLIST_STRING =
+ "INSERT OR REPLACE INTO blacklist (uri, timestamp) VALUES (?,?)";
+
private const string GET_OBJECT_COUNT_BY_FILTER_STRING =
"SELECT COUNT(1) FROM meta_data m %s";
@@ -188,7 +199,7 @@ internal class Rygel.MediaExport.SQLFactory : Object {
"WHERE _column IS NOT NULL %s %s" +
"LIMIT ?,?";
- internal const string SCHEMA_VERSION = "16";
+ internal const string SCHEMA_VERSION = "17";
internal const string CREATE_META_DATA_TABLE_STRING =
"CREATE TABLE meta_data (size INTEGER NOT NULL, " +
"mime_type TEXT NOT NULL, " +
@@ -213,6 +224,9 @@ internal class Rygel.MediaExport.SQLFactory : Object {
"object_fk_id REFERENCES Object(upnp_id) " +
"ON DELETE CASCADE);";
+ private const string CREATE_BLACKLIST_TABLE_STRING =
+ "CREATE TABLE blacklist (uri TEXT, timestamp INTEGER NOT NULL);";
+
private const string SCHEMA_STRING =
"CREATE TABLE schema_info (version TEXT NOT NULL, " +
"reset_token TEXT); " +
@@ -229,6 +243,7 @@ internal class Rygel.MediaExport.SQLFactory : Object {
"container_update_id INTEGER, " +
"is_guarded INTEGER, " +
"reference_id TEXT DEFAULT NULL);" +
+ CREATE_BLACKLIST_TABLE_STRING +
"INSERT INTO schema_info (version) VALUES ('" +
SQLFactory.SCHEMA_VERSION + "'); ";
@@ -283,9 +298,11 @@ internal class Rygel.MediaExport.SQLFactory : Object {
"CREATE INDEX IF NOT EXISTS idx_meta_data_genre on meta_data(genre);" +
"CREATE INDEX IF NOT EXISTS idx_meta_data_album on meta_data(album);" +
"CREATE INDEX IF NOT EXISTS idx_meta_data_artist_album on " +
- "meta_data(author, album);";
-
+ "meta_data(author, album);" +
+ CREATE_BLACKLIST_INDEX_STRING;
+ private const string CREATE_BLACKLIST_INDEX_STRING =
+ "CREATE INDEX IF NOT EXISTS idx_blacklist on blacklist(uri);";
private const string EXISTS_CACHE_STRING =
"SELECT m.size, o.timestamp, o.uri FROM Object o " +
@@ -362,6 +379,14 @@ internal class Rygel.MediaExport.SQLFactory : Object {
return UPDATE_GUARDED_OBJECT_STRING;
case SQLString.TRIGGER_REFERENCE:
return DELETE_REFERENCE_TRIGGER_STRING;
+ case SQLString.CREATE_BLACKLIST_TABLE:
+ return CREATE_BLACKLIST_TABLE_STRING;
+ case SQLString.CREATE_BLACKLIST_INDEX:
+ return CREATE_BLACKLIST_INDEX_STRING;
+ case SQLString.ADD_TO_BLACKLIST:
+ return ADD_TO_BLACKLIST_STRING;
+ case SQLString.CHECK_BLACKLIST:
+ return CHECK_BLACKLIST_STRING;
default:
assert_not_reached ();
}