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
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())
}

View file

@ -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<Artist> {
@ -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
}

View file

@ -299,6 +299,13 @@ object MusicUtil : KoinComponent {
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 {
return PlaylistsUtil
.doPlaylistContains(context, getFavoritesPlaylist(context).id, song.id)