diff --git a/android/app/src/main/java/io/github/kichikuou/system3/GameActivity.kt b/android/app/src/main/java/io/github/kichikuou/system3/GameActivity.kt index 6ce7a1f..e1a886a 100644 --- a/android/app/src/main/java/io/github/kichikuou/system3/GameActivity.kt +++ b/android/app/src/main/java/io/github/kichikuou/system3/GameActivity.kt @@ -196,7 +196,7 @@ private class CddaPlayer(private val playlistPath: File) { private var playerPaused = false fun start(track: Int, loop: Boolean) { - val f = playlist.elementAtOrNull(track) + val f = playlist.elementAtOrNull(track - 1) if (f.isNullOrEmpty()) { Log.w("cddaStart", "No playlist entry for track $track") return diff --git a/android/app/src/main/java/io/github/kichikuou/system3/Launcher.kt b/android/app/src/main/java/io/github/kichikuou/system3/Launcher.kt index d383ae5..81bf63b 100644 --- a/android/app/src/main/java/io/github/kichikuou/system3/Launcher.kt +++ b/android/app/src/main/java/io/github/kichikuou/system3/Launcher.kt @@ -46,7 +46,8 @@ private const val FAILURE = 2 class Launcher private constructor(private val rootDir: File) { companion object { const val TITLE_FILE = "title.txt" - const val PLAYLIST_FILE = "playlist.txt" + const val PLAYLIST_FILE = "playlist2.txt" + const val OLD_PLAYLIST_FILE = "playlist.txt" fun getInstance(rootDir: File): Launcher { if (gLauncher == null) { @@ -121,6 +122,7 @@ class Launcher private constructor(private val rootDir: File) { val titleFile = File(path, TITLE_FILE) val title = titleFile.readText() games.add(Entry(path, title, titleFile.lastModified())) + migratePlaylist(path) } catch (e: IOException) { // Incomplete game installation. Delete it. path.deleteRecursively() @@ -207,6 +209,20 @@ class Launcher private constructor(private val rootDir: File) { } } + // System3-sdl2 <=0.7.0 had a bug where playlist had an extra empty line at + // the beginning of the file. This migrates playlist.txt created by an old + // version of system3-sdl2 to playlist2.txt. + private fun migratePlaylist(dir: File) { + val oldPlaylist = File(dir, OLD_PLAYLIST_FILE) + if (!oldPlaylist.exists()) + return + var tracks = oldPlaylist.readLines() + if (!tracks.isEmpty()) + tracks = tracks.subList(1, tracks.size) + File(dir, PLAYLIST_FILE).writeText(tracks.joinToString("\n")) + oldPlaylist.delete() + } + class InstallFailureException(val msgId: Int) : Exception() // A helper class which generates playlist.txt in the game root directory. @@ -223,8 +239,8 @@ class Launcher private constructor(private val rootDir: File) { } audioRegex.matchEntire(name)?.let { val track = it.groupValues[1].toInt() - if (track < audioFiles.size) - audioFiles[track] = path + if (0 < track && track <= audioFiles.size) + audioFiles[track - 1] = path } }