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. */