From 04f254f91b2fd0ef30de5317e58488b7c27ea2c0 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Wed, 18 May 2022 20:03:45 -0600 Subject: [PATCH] music: add disc number indexing Change the indexer to parse out the disc number field from AudioColumns.TRACK. On newer versions, I hope to further modify the loader to use the API 30+ CD_TRACK_NUMBER field, as it is more versatile than TRACK. --- .../org/oxycblt/auxio/detail/DetailViewModel.kt | 1 + .../main/java/org/oxycblt/auxio/music/Indexer.kt | 15 +++++++++++++-- .../main/java/org/oxycblt/auxio/music/Music.kt | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt index bd307a00c..649a7c56c 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -139,6 +139,7 @@ class DetailViewModel : ViewModel() { val data = mutableListOf(album) data.add(SortHeader(id = -2, R.string.lbl_songs)) data.add(DiscHeader(id = -3, 1)) + data.addAll(albumSort.album(album)) _albumData.value = data } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/Indexer.kt b/app/src/main/java/org/oxycblt/auxio/music/Indexer.kt index f574a7336..08bf244da 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Indexer.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/Indexer.kt @@ -192,8 +192,18 @@ object Indexer { // and T is the track. This is dumb and insane and forces me to mangle track // numbers above 1000, but there is nothing we can do that won't break the app // below API 30. - // TODO: Disk number support? - val track = cursor.getIntOrNull(trackIndex)?.mod(1000) + var track: Int? = null + var disc: Int? = null + + val rawTrack = cursor.getIntOrNull(trackIndex) + if (rawTrack != null) { + track = rawTrack % 1000 + disc = rawTrack / 1000 + if (disc == 0) { + // A disc number of 0 means that there is no disc. + disc = null + } + } val duration = cursor.getLong(durationIndex) val year = cursor.getIntOrNull(yearIndex) @@ -225,6 +235,7 @@ object Indexer { fileName, duration, track, + disc, id, year, album, diff --git a/app/src/main/java/org/oxycblt/auxio/music/Music.kt b/app/src/main/java/org/oxycblt/auxio/music/Music.kt index 3c588b007..2cbf1a529 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Music.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/Music.kt @@ -68,6 +68,8 @@ data class Song( val duration: Long, /** The track number of this song, null if there isn't any. */ val track: Int?, + /** The disc number of this song, null if there isn't any. */ + val disc: Int?, /** Internal field. Do not use. */ val _mediaStoreId: Long, /** Internal field. Do not use. */