diff --git a/musikr/src/main/java/org/oxycblt/musikr/model/AlbumImpl.kt b/musikr/src/main/java/org/oxycblt/musikr/model/AlbumImpl.kt index 99817b6eb..6031569b8 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/model/AlbumImpl.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/model/AlbumImpl.kt @@ -50,7 +50,7 @@ class AlbumImpl internal constructor(private val core: AlbumCore) : Album { // I don't know if there is any situation where an artist will have two albums with // the exact same name, but if there is, I would love to know. update(preAlbum.rawName) - update(preAlbum.preArtists.map { it.rawName }) + update(preAlbum.preArtists.mapNotNull { it.rawName }) } override val name = preAlbum.name override val releaseType = preAlbum.releaseType diff --git a/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/PreMusic.kt b/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/PreMusic.kt index 4d8831acf..1760039b1 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/PreMusic.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/PreMusic.kt @@ -51,7 +51,8 @@ internal data class PreSong( val cover: Cover?, val preAlbum: PreAlbum, val preArtists: List, - val preGenres: List + val preGenres: List, + val compatAlbumArtistNames: List ) { val uid = musicBrainzId?.let { Music.UID.musicBrainz(Music.UID.Item.SONG, it) } @@ -66,8 +67,10 @@ internal data class PreSong( update(track) update(disc?.number) - update(preArtists.map { artist -> artist.rawName }) - update(preAlbum.preArtists.map { artist -> artist.rawName }) + update(preArtists.mapNotNull { artist -> artist.rawName }) + // We have to encode the album artist names as-is w/o the interpreter's actions to + // maintain UID parity + update(compatAlbumArtistNames) } } diff --git a/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt b/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt index 1deb269aa..efab3b609 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt @@ -83,7 +83,8 @@ private class TagInterpreterImpl(private val interpretation: Interpretation) : T preAlbum = preAlbum, preArtists = rawArtists, preGenres = rawGenres, - cover = song.cover) + cover = song.cover, + compatAlbumArtistNames = song.tags.albumArtistNames) } private fun makePreAlbum( diff --git a/musikr/src/main/java/org/oxycblt/musikr/tag/parse/TagParser.kt b/musikr/src/main/java/org/oxycblt/musikr/tag/parse/TagParser.kt index 42d76af43..e3fe90f0f 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/tag/parse/TagParser.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/tag/parse/TagParser.kt @@ -38,14 +38,14 @@ private data object TagParserImpl : TagParser { replayGainTrackAdjustment = metadata.replayGainTrackAdjustment(), replayGainAlbumAdjustment = metadata.replayGainAlbumAdjustment(), musicBrainzId = metadata.musicBrainzId(), - name = metadata.name() ?: unlikelyToBeNull(file.path.name), + name = metadata.name() ?: unlikelyToBeNull(file.path.name).split('.').first(), sortName = metadata.sortName(), track = metadata.track(), disc = metadata.disc(), subtitle = metadata.subtitle(), date = metadata.date(), albumMusicBrainzId = metadata.albumMusicBrainzId(), - albumName = metadata.albumName(), + albumName = metadata.albumName() ?: file.path.directory.name, albumSortName = metadata.albumSortName(), // Compilation flag implies a compilation release type in the case that // we don't have any other release types