diff --git a/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt b/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt index 98fe4209e..fbfde54c8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt @@ -27,6 +27,8 @@ data class Artist( val name = safeGetFirstAlbum().safeGetFirstSong().albumArtist return if (MusicUtil.isArtistNameUnknown(name)) { UNKNOWN_ARTIST_DISPLAY_NAME + } else if (MusicUtil.isVariousArtists(name)) { + VARIOUS_ARTISTS_DISPLAY_NAME } else safeGetFirstAlbum().safeGetFirstSong().artistName } @@ -51,6 +53,8 @@ data class Artist( companion object { const val UNKNOWN_ARTIST_DISPLAY_NAME = "Unknown Artist" + const val VARIOUS_ARTISTS_DISPLAY_NAME = "Various Artists" + const val VARIOUS_ARTISTS_ID : Long = -2 val empty = Artist(-1, emptyList()) } diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt index 907bf49c9..d78df6d1f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt @@ -40,6 +40,19 @@ class RealArtistRepository( PreferenceUtil.artistSongSortOrder } override fun artist(artistId: Long): Artist { + if (artistId == Artist.VARIOUS_ARTISTS_ID) { + // Get Various Artists + val songs = songRepository.songs( + songRepository.makeSongCursor( + null, + null, + getSongLoaderSortOrder() + ) + ) + val albums = albumRepository.splitIntoAlbums(songs).filter { it.albumArtist == Artist.VARIOUS_ARTISTS_DISPLAY_NAME } + return Artist(Artist.VARIOUS_ARTISTS_ID, albums) + } + val songs = songRepository.songs( songRepository.makeSongCursor( AudioColumns.ARTIST_ID + "=?", @@ -68,9 +81,7 @@ class RealArtistRepository( ) ) - val sortString = if (PreferenceUtil.artistSortOrder.contains("DESC")) String.CASE_INSENSITIVE_ORDER.reversed() else String.CASE_INSENSITIVE_ORDER - - return splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs)).sortedWith(compareBy(sortString) { it.name }) + return splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs)) } override fun artists(query: String): List { @@ -89,8 +100,12 @@ class RealArtistRepository( return albums.groupBy { it.albumArtist } .map { val currentAlbums = it.value - if (albums.isNotEmpty()) { - Artist(currentAlbums[0].artistId, currentAlbums) + if (currentAlbums.isNotEmpty()) { + if (currentAlbums[0].albumArtist == Artist.VARIOUS_ARTISTS_DISPLAY_NAME) { + Artist(Artist.VARIOUS_ARTISTS_ID, currentAlbums) + } else { + Artist(currentAlbums[0].artistId, currentAlbums) + } } else { Artist.empty } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt index 0af7cb916..e267966a4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt @@ -299,6 +299,13 @@ object MusicUtil : KoinComponent { return tempName == "unknown" || tempName == "" } + fun isVariousArtists(artistName: String): Boolean { + if (artistName == Artist.VARIOUS_ARTISTS_DISPLAY_NAME) { + return true + } + return false + } + fun isFavorite(context: Context, song: Song): Boolean { return PlaylistsUtil .doPlaylistContains(context, getFavoritesPlaylist(context).id, song.id)