diff options
author | Jens Georg <mail@jensge.org> | 2015-07-05 15:42:54 +0200 |
---|---|---|
committer | Jens Georg <mail@jensge.org> | 2015-07-05 16:51:58 +0200 |
commit | f87f4249906dc197f4a8bf12950bfa2566d78ac2 (patch) | |
tree | 80afada88460989c8d77d1e1ed5baf06af1d907f /src | |
parent | d1948b21f0ca9167ebafd671cba90c210d6d8500 (diff) | |
download | rygel-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.vala | 19 | ||||
-rw-r--r-- | src/plugins/media-export/rygel-media-export-sql-factory.vala | 33 |
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 (); } |