Various artists is working

This commit is contained in:
thomas 2020-09-21 00:17:53 -04:00
parent 2ed5e236da
commit 6747af076f
3 changed files with 31 additions and 5 deletions

View file

@ -27,6 +27,8 @@ data class Artist(
val name = safeGetFirstAlbum().safeGetFirstSong().albumArtist val name = safeGetFirstAlbum().safeGetFirstSong().albumArtist
return if (MusicUtil.isArtistNameUnknown(name)) { return if (MusicUtil.isArtistNameUnknown(name)) {
UNKNOWN_ARTIST_DISPLAY_NAME UNKNOWN_ARTIST_DISPLAY_NAME
} else if (MusicUtil.isVariousArtists(name)) {
VARIOUS_ARTISTS_DISPLAY_NAME
} else safeGetFirstAlbum().safeGetFirstSong().artistName } else safeGetFirstAlbum().safeGetFirstSong().artistName
} }
@ -51,6 +53,8 @@ data class Artist(
companion object { companion object {
const val UNKNOWN_ARTIST_DISPLAY_NAME = "Unknown Artist" 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()) val empty = Artist(-1, emptyList())
} }

View file

@ -40,6 +40,19 @@ class RealArtistRepository(
PreferenceUtil.artistSongSortOrder PreferenceUtil.artistSongSortOrder
} }
override fun artist(artistId: Long): Artist { 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( val songs = songRepository.songs(
songRepository.makeSongCursor( songRepository.makeSongCursor(
AudioColumns.ARTIST_ID + "=?", 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))
return splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs)).sortedWith(compareBy(sortString) { it.name })
} }
override fun artists(query: String): List<Artist> { override fun artists(query: String): List<Artist> {
@ -89,8 +100,12 @@ class RealArtistRepository(
return albums.groupBy { it.albumArtist } return albums.groupBy { it.albumArtist }
.map { .map {
val currentAlbums = it.value val currentAlbums = it.value
if (albums.isNotEmpty()) { if (currentAlbums.isNotEmpty()) {
if (currentAlbums[0].albumArtist == Artist.VARIOUS_ARTISTS_DISPLAY_NAME) {
Artist(Artist.VARIOUS_ARTISTS_ID, currentAlbums)
} else {
Artist(currentAlbums[0].artistId, currentAlbums) Artist(currentAlbums[0].artistId, currentAlbums)
}
} else { } else {
Artist.empty Artist.empty
} }

View file

@ -299,6 +299,13 @@ object MusicUtil : KoinComponent {
return tempName == "unknown" || tempName == "<unknown>" return tempName == "unknown" || tempName == "<unknown>"
} }
fun isVariousArtists(artistName: String): Boolean {
if (artistName == Artist.VARIOUS_ARTISTS_DISPLAY_NAME) {
return true
}
return false
}
fun isFavorite(context: Context, song: Song): Boolean { fun isFavorite(context: Context, song: Song): Boolean {
return PlaylistsUtil return PlaylistsUtil
.doPlaylistContains(context, getFavoritesPlaylist(context).id, song.id) .doPlaylistContains(context, getFavoritesPlaylist(context).id, song.id)