From d4062b18dd51db0bb4178fde7fe1bc9c80e5893e Mon Sep 17 00:00:00 2001 From: Adrian Ulrich Date: Mon, 5 Mar 2018 10:33:33 +0100 Subject: [PATCH] introduce song._flags Adds a new _flags column to the song table which can be used to store bool flags for the song. Currently, only 1<<0 is used to indicate that a song is outdated (but still valid) --- .../blinkenlights/android/medialibrary/MediaLibrary.java | 6 ++++++ .../android/medialibrary/MediaLibraryBackend.java | 2 +- .../blinkenlights/android/medialibrary/MediaScanner.java | 4 +++- .../ch/blinkenlights/android/medialibrary/MediaSchema.java | 7 ++++++- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaLibrary.java b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaLibrary.java index 777da647..dd140fda 100644 --- a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaLibrary.java +++ b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaLibrary.java @@ -56,6 +56,8 @@ public class MediaLibrary { public static final int ROLE_COMPOSER = 1; public static final int ROLE_ALBUMARTIST = 2; + public static final int SONG_FLAG_OUTDATED = (1 << 0); // entry in library should get rescanned. + public static final String PREFERENCES_FILE = "_prefs-v1.obj"; /** @@ -597,6 +599,10 @@ public class MediaLibrary { * The mtime of this item */ String MTIME = "mtime"; + /** + * Various flags of this entry, see SONG_FLAG... + */ + String FLAGS = "_flags"; } // Columns of Album entries diff --git a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaLibraryBackend.java b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaLibraryBackend.java index db0e7168..7a99f3fa 100644 --- a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaLibraryBackend.java +++ b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaLibraryBackend.java @@ -35,7 +35,7 @@ public class MediaLibraryBackend extends SQLiteOpenHelper { /** * The database version we are using */ - private static final int DATABASE_VERSION = 20180129; + private static final int DATABASE_VERSION = 20180305; /** * on-disk file to store the database */ diff --git a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaScanner.java b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaScanner.java index 10cbb445..d6e69544 100644 --- a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaScanner.java +++ b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaScanner.java @@ -439,13 +439,14 @@ public class MediaScanner implements Handler.Callback { return false; long dbEntryMtime = mBackend.getColumnFromSongId(MediaLibrary.SongColumns.MTIME, songId) * 1000; // this is in unixtime -> convert to 'ms' + long songFlags = mBackend.getColumnFromSongId(MediaLibrary.SongColumns.FLAGS, songId); long fileMtime = file.lastModified(); long playCount = 0; long skipCount = 0; boolean hasChanged = false; boolean mustInsert = false; - if (fileMtime > 0 && dbEntryMtime >= fileMtime) { + if (fileMtime > 0 && dbEntryMtime >= fileMtime && (songFlags & MediaLibrary.SONG_FLAG_OUTDATED) == 0) { return false; // on-disk mtime is older than db mtime and it still exists -> nothing to do } @@ -507,6 +508,7 @@ public class MediaScanner implements Handler.Callback { v.put(MediaLibrary.SongColumns.PLAYCOUNT, playCount); v.put(MediaLibrary.SongColumns.SKIPCOUNT, skipCount); v.put(MediaLibrary.SongColumns.PATH, path); + v.put(MediaLibrary.SongColumns.FLAGS, (songFlags &~MediaLibrary.SONG_FLAG_OUTDATED)); mBackend.insert(MediaLibrary.TABLE_SONGS, null, v); v.clear(); diff --git a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaSchema.java b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaSchema.java index d87ead9d..e7159367 100644 --- a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaSchema.java +++ b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaSchema.java @@ -35,7 +35,8 @@ public class MediaSchema { + MediaLibrary.SongColumns.SKIPCOUNT +" INTEGER NOT NULL DEFAULT 0, " + MediaLibrary.SongColumns.MTIME +" TIMESTAMP DEFAULT (strftime('%s', CURRENT_TIMESTAMP)), " + MediaLibrary.SongColumns.DURATION +" INTEGER NOT NULL, " - + MediaLibrary.SongColumns.PATH +" VARCHAR(4096) NOT NULL " + + MediaLibrary.SongColumns.PATH +" VARCHAR(4096) NOT NULL, " + + MediaLibrary.SongColumns.FLAGS +" INTEGER NOT NULL DEFAULT 0 " + ");"; /** @@ -326,6 +327,10 @@ public class MediaSchema { dbh.execSQL("UPDATE songs SET mtime=1"); } + if (oldVersion < 20180305) { + dbh.execSQL("ALTER TABLE "+MediaLibrary.TABLE_SONGS+" ADD COLUMN "+MediaLibrary.SongColumns.FLAGS+" INTEGER NOT NULL DEFAULT 0 "); + } + } }