From 4421d6cf36ab7c035d8b71515a9bf2942426f380 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Sat, 16 Dec 2023 13:52:36 -0700 Subject: [PATCH] music: deduplicate by case At some point, the switch to keying raw music information broke my mitigation for duplicate tags that use similar cases. This then crashed the music loader in certain cases. Fix it by making the check use raw music keys. Resolves #614 --- .../oxycblt/auxio/music/device/DeviceMusicImpl.kt | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/music/device/DeviceMusicImpl.kt b/app/src/main/java/org/oxycblt/auxio/music/device/DeviceMusicImpl.kt index e3e2232ad..ec71efbf4 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/device/DeviceMusicImpl.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/device/DeviceMusicImpl.kt @@ -150,26 +150,26 @@ class SongImpl( val artistSortNames = separators.split(rawSong.artistSortNames) val rawIndividualArtists = artistNames - .mapIndexedTo(mutableSetOf()) { i, name -> + .mapIndexed { i, name -> RawArtist( artistMusicBrainzIds.getOrNull(i)?.toUuidOrNull(), name, artistSortNames.getOrNull(i)) } - .toList() + .distinctBy { it.key } val albumArtistMusicBrainzIds = separators.split(rawSong.albumArtistMusicBrainzIds) val albumArtistNames = separators.split(rawSong.albumArtistNames) val albumArtistSortNames = separators.split(rawSong.albumArtistSortNames) val rawAlbumArtists = albumArtistNames - .mapIndexedTo(mutableSetOf()) { i, name -> + .mapIndexed { i, name -> RawArtist( albumArtistMusicBrainzIds.getOrNull(i)?.toUuidOrNull(), name, albumArtistSortNames.getOrNull(i)) } - .toList() + .distinctBy { it.key } rawAlbum = RawAlbum( @@ -195,10 +195,7 @@ class SongImpl( val genreNames = (rawSong.genreNames.parseId3GenreNames() ?: separators.split(rawSong.genreNames)) rawGenres = - genreNames - .mapTo(mutableSetOf()) { RawGenre(it) } - .toList() - .ifEmpty { listOf(RawGenre()) } + genreNames.map { RawGenre(it) }.distinctBy { it.key }.ifEmpty { listOf(RawGenre()) } hashCode = 31 * hashCode + rawSong.hashCode() hashCode = 31 * hashCode + nameFactory.hashCode()