music: sort mediaitems sent in browser
This commit is contained in:
parent
7e07c11d3a
commit
aac39b771d
1 changed files with 29 additions and 8 deletions
|
@ -28,6 +28,8 @@ import kotlinx.coroutines.Deferred
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
|
import org.oxycblt.auxio.list.ListSettings
|
||||||
|
import org.oxycblt.auxio.list.sort.Sort
|
||||||
import org.oxycblt.auxio.music.Album
|
import org.oxycblt.auxio.music.Album
|
||||||
import org.oxycblt.auxio.music.Artist
|
import org.oxycblt.auxio.music.Artist
|
||||||
import org.oxycblt.auxio.music.Genre
|
import org.oxycblt.auxio.music.Genre
|
||||||
|
@ -44,6 +46,7 @@ class MediaItemBrowser
|
||||||
constructor(
|
constructor(
|
||||||
@ApplicationContext private val context: Context,
|
@ApplicationContext private val context: Context,
|
||||||
private val musicRepository: MusicRepository,
|
private val musicRepository: MusicRepository,
|
||||||
|
private val listSettings: ListSettings,
|
||||||
private val searchEngine: SearchEngine
|
private val searchEngine: SearchEngine
|
||||||
) : MusicRepository.UpdateListener {
|
) : MusicRepository.UpdateListener {
|
||||||
private val browserJob = Job()
|
private val browserJob = Job()
|
||||||
|
@ -142,13 +145,21 @@ constructor(
|
||||||
MediaSessionUID.Category.ROOT ->
|
MediaSessionUID.Category.ROOT ->
|
||||||
MediaSessionUID.Category.IMPORTANT.map { it.toMediaItem(context) }
|
MediaSessionUID.Category.IMPORTANT.map { it.toMediaItem(context) }
|
||||||
MediaSessionUID.Category.SONGS ->
|
MediaSessionUID.Category.SONGS ->
|
||||||
deviceLibrary.songs.map { it.toMediaItem(context, null) }
|
listSettings.songSort.songs(deviceLibrary.songs).map {
|
||||||
|
it.toMediaItem(context, null)
|
||||||
|
}
|
||||||
MediaSessionUID.Category.ALBUMS ->
|
MediaSessionUID.Category.ALBUMS ->
|
||||||
deviceLibrary.albums.map { it.toMediaItem(context) }
|
listSettings.albumSort.albums(deviceLibrary.albums).map {
|
||||||
|
it.toMediaItem(context)
|
||||||
|
}
|
||||||
MediaSessionUID.Category.ARTISTS ->
|
MediaSessionUID.Category.ARTISTS ->
|
||||||
deviceLibrary.artists.map { it.toMediaItem(context) }
|
listSettings.artistSort.artists(deviceLibrary.artists).map {
|
||||||
|
it.toMediaItem(context)
|
||||||
|
}
|
||||||
MediaSessionUID.Category.GENRES ->
|
MediaSessionUID.Category.GENRES ->
|
||||||
deviceLibrary.genres.map { it.toMediaItem(context) }
|
listSettings.genreSort.genres(deviceLibrary.genres).map {
|
||||||
|
it.toMediaItem(context)
|
||||||
|
}
|
||||||
MediaSessionUID.Category.PLAYLISTS ->
|
MediaSessionUID.Category.PLAYLISTS ->
|
||||||
userLibrary.playlists.map { it.toMediaItem(context) }
|
userLibrary.playlists.map { it.toMediaItem(context) }
|
||||||
}
|
}
|
||||||
|
@ -168,14 +179,18 @@ constructor(
|
||||||
private fun getChildMediaItems(uid: Music.UID): List<MediaItem>? {
|
private fun getChildMediaItems(uid: Music.UID): List<MediaItem>? {
|
||||||
return when (val item = musicRepository.find(uid)) {
|
return when (val item = musicRepository.find(uid)) {
|
||||||
is Album -> {
|
is Album -> {
|
||||||
item.songs.map { it.toMediaItem(context, item) }
|
val songs = listSettings.albumSongSort.songs(item.songs)
|
||||||
|
songs.map { it.toMediaItem(context, item) }
|
||||||
}
|
}
|
||||||
is Artist -> {
|
is Artist -> {
|
||||||
(item.explicitAlbums + item.implicitAlbums).map { it.toMediaItem(context) } +
|
val albums = ARTIST_ALBUMS_SORT.albums(item.explicitAlbums + item.implicitAlbums)
|
||||||
item.songs.map { it.toMediaItem(context, item) }
|
val songs = listSettings.artistSongSort.songs(item.songs)
|
||||||
|
albums.map { it.toMediaItem(context) } + songs.map { it.toMediaItem(context, item) }
|
||||||
}
|
}
|
||||||
is Genre -> {
|
is Genre -> {
|
||||||
item.songs.map { it.toMediaItem(context, item) }
|
val artists = GENRE_ARTISTS_SORT.artists(item.artists)
|
||||||
|
val songs = listSettings.genreSongSort.songs(item.songs)
|
||||||
|
artists.map { it.toMediaItem(context) } + songs.map { it.toMediaItem(context, null) }
|
||||||
}
|
}
|
||||||
is Playlist -> {
|
is Playlist -> {
|
||||||
item.songs.map { it.toMediaItem(context, item) }
|
item.songs.map { it.toMediaItem(context, item) }
|
||||||
|
@ -290,4 +305,10 @@ constructor(
|
||||||
}
|
}
|
||||||
return subList(start, end).toMutableList()
|
return subList(start, end).toMutableList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private companion object {
|
||||||
|
// TODO: Rely on detail item gen logic?
|
||||||
|
val ARTIST_ALBUMS_SORT = Sort(Sort.Mode.ByDate, Sort.Direction.DESCENDING)
|
||||||
|
val GENRE_ARTISTS_SORT = Sort(Sort.Mode.ByName, Sort.Direction.ASCENDING)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue