Various artists is working
This commit is contained in:
parent
2ed5e236da
commit
6747af076f
3 changed files with 31 additions and 5 deletions
|
@ -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())
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()) {
|
||||||
Artist(currentAlbums[0].artistId, currentAlbums)
|
if (currentAlbums[0].albumArtist == Artist.VARIOUS_ARTISTS_DISPLAY_NAME) {
|
||||||
|
Artist(Artist.VARIOUS_ARTISTS_ID, currentAlbums)
|
||||||
|
} else {
|
||||||
|
Artist(currentAlbums[0].artistId, currentAlbums)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Artist.empty
|
Artist.empty
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue