music: add non-standard artist fields
Add non-standard ARTISTS/ALBUMARTIST fields to reasonable places in the ID3v2 and Vorbis parsers. Turns out these are stupidly common when multi-artist information is used in order to maximize player compatibility. More or less, TPE1 and ARTIST will be filled in with delimited values, while ARTISTS will be filled in with native multi-value information. This is stupid and insane, but I want to prioritize a good out of box experience without much user fiddling, so I may as well implement these. Currently, I'm only adding the non-standard fields that I know exist. This doesn't include hypothetical but unencountered fields like TXXX:ALBUMARTISTS.
This commit is contained in:
parent
176f0cc465
commit
5f9169fb78
2 changed files with 9 additions and 8 deletions
|
|
@ -213,7 +213,7 @@ class Task(context: Context, private val raw: Song.Raw) {
|
||||||
|
|
||||||
// Artist
|
// Artist
|
||||||
textFrames["TXXX:musicbrainz artist id"]?.let { raw.artistMusicBrainzIds = it }
|
textFrames["TXXX:musicbrainz artist id"]?.let { raw.artistMusicBrainzIds = it }
|
||||||
textFrames["TPE1"]?.let { raw.artistNames = it }
|
(textFrames["TXXX:artists"] ?: textFrames["TPE1"])?.let { raw.artistNames = it }
|
||||||
textFrames["TSOP"]?.let { raw.artistSortNames = it }
|
textFrames["TSOP"]?.let { raw.artistSortNames = it }
|
||||||
|
|
||||||
// Album artist
|
// Album artist
|
||||||
|
|
@ -304,15 +304,16 @@ class Task(context: Context, private val raw: Song.Raw) {
|
||||||
|
|
||||||
// Artist
|
// Artist
|
||||||
comments["musicbrainz_artistid"]?.let { raw.artistMusicBrainzIds = it }
|
comments["musicbrainz_artistid"]?.let { raw.artistMusicBrainzIds = it }
|
||||||
comments["artist"]?.let { raw.artistNames = it }
|
(comments["artists"] ?: comments["artist"])?.let { raw.artistNames = it }
|
||||||
comments["artistsort"]?.let { raw.artistSortNames = it }
|
(comments["artists_sort"] ?: comments["artistsort"])?.let { raw.artistSortNames = it }
|
||||||
|
|
||||||
// Album artist
|
// Album artist
|
||||||
comments["musicbrainz_albumartistid"]?.let { raw.albumArtistMusicBrainzIds = it }
|
comments["musicbrainz_albumartistid"]?.let { raw.albumArtistMusicBrainzIds = it }
|
||||||
comments["albumartist"]?.let { raw.albumArtistNames = it }
|
(comments["albumartists"] ?: comments["albumartist"])?.let { raw.albumArtistNames = it }
|
||||||
comments["albumartistsort"]?.let { raw.albumArtistSortNames = it }
|
(comments["albumartists_sort"] ?: comments["albumartistsort"])
|
||||||
|
?.let { raw.albumArtistSortNames = it }
|
||||||
|
|
||||||
// Genre
|
// Genre
|
||||||
comments["GENRE"]?.let { raw.genreNames = it }
|
comments["genre"]?.let { raw.genreNames = it }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -128,8 +128,8 @@ class QueueFragment : ViewBindingFragment<FragmentQueueBinding>(), EditableListL
|
||||||
binding.queueRecycler.scrollToPosition(scrollTo)
|
binding.queueRecycler.scrollToPosition(scrollTo)
|
||||||
} else if (scrollTo > end) {
|
} else if (scrollTo > end) {
|
||||||
// We need to scroll downwards, we need to offset by a screen of songs.
|
// We need to scroll downwards, we need to offset by a screen of songs.
|
||||||
// This does have some error due to what the layout manager returns being
|
// This does have some error due to how many completely visible items on-screen
|
||||||
// somewhat mutable. This is considered okay.
|
// can vary. This is considered okay.
|
||||||
binding.queueRecycler.scrollToPosition(
|
binding.queueRecycler.scrollToPosition(
|
||||||
min(queue.lastIndex, scrollTo + (end - start)))
|
min(queue.lastIndex, scrollTo + (end - start)))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue