2020-05-23 15:09:07 +00:00
|
|
|
package code.name.monkey.retromusic.fragments
|
|
|
|
|
|
|
|
import androidx.lifecycle.LiveData
|
|
|
|
import androidx.lifecycle.MutableLiveData
|
2020-07-20 19:05:48 +00:00
|
|
|
import androidx.lifecycle.ViewModel
|
2020-05-23 15:09:07 +00:00
|
|
|
import androidx.lifecycle.viewModelScope
|
2020-08-20 06:49:08 +00:00
|
|
|
import code.name.monkey.retromusic.db.PlaylistWithSongs
|
2020-05-23 15:09:07 +00:00
|
|
|
import code.name.monkey.retromusic.fragments.ReloadType.*
|
|
|
|
import code.name.monkey.retromusic.interfaces.MusicServiceEventListener
|
|
|
|
import code.name.monkey.retromusic.model.*
|
2020-08-13 17:08:37 +00:00
|
|
|
import code.name.monkey.retromusic.repository.RealRepository
|
2020-05-23 15:09:07 +00:00
|
|
|
import kotlinx.coroutines.Deferred
|
|
|
|
import kotlinx.coroutines.Dispatchers.IO
|
|
|
|
import kotlinx.coroutines.async
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
|
2020-07-20 19:05:48 +00:00
|
|
|
class LibraryViewModel(
|
2020-08-13 17:08:37 +00:00
|
|
|
private val realRepository: RealRepository
|
2020-07-20 19:05:48 +00:00
|
|
|
) : ViewModel(), MusicServiceEventListener {
|
2020-05-23 15:09:07 +00:00
|
|
|
|
2020-08-13 08:24:36 +00:00
|
|
|
private val paletteColor = MutableLiveData<Int>()
|
2020-07-28 19:18:34 +00:00
|
|
|
private val albums = MutableLiveData<List<Album>>()
|
|
|
|
private val songs = MutableLiveData<List<Song>>()
|
|
|
|
private val artists = MutableLiveData<List<Artist>>()
|
|
|
|
private val playlists = MutableLiveData<List<Playlist>>()
|
2020-08-20 06:49:08 +00:00
|
|
|
private val roomPlaylists = MutableLiveData<List<PlaylistWithSongs>>()
|
2020-07-28 19:18:34 +00:00
|
|
|
private val genres = MutableLiveData<List<Genre>>()
|
|
|
|
private val home = MutableLiveData<List<Home>>()
|
|
|
|
|
|
|
|
val paletteColorLiveData: LiveData<Int> = paletteColor
|
|
|
|
val homeLiveData: LiveData<List<Home>> = home
|
|
|
|
val albumsLiveData: LiveData<List<Album>> = albums
|
|
|
|
val songsLiveData: LiveData<List<Song>> = songs
|
|
|
|
val artistsLiveData: LiveData<List<Artist>> = artists
|
|
|
|
val playlisitsLiveData: LiveData<List<Playlist>> = playlists
|
2020-08-20 06:49:08 +00:00
|
|
|
val roomPlaylisitsLiveData: LiveData<List<PlaylistWithSongs>> = roomPlaylists
|
2020-07-28 19:18:34 +00:00
|
|
|
val genresLiveData: LiveData<List<Genre>> = genres
|
2020-05-23 15:09:07 +00:00
|
|
|
|
|
|
|
init {
|
|
|
|
viewModelScope.launch {
|
|
|
|
loadLibraryContent()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun loadLibraryContent() = viewModelScope.launch {
|
2020-07-28 19:18:34 +00:00
|
|
|
songs.value = loadSongs.await()
|
|
|
|
albums.value = loadAlbums.await()
|
|
|
|
artists.value = loadArtists.await()
|
|
|
|
playlists.value = loadPlaylists.await()
|
2020-08-20 06:49:08 +00:00
|
|
|
roomPlaylists.value = loadPlaylistsWithSongs.await()
|
|
|
|
//genres.value = loadGenres.await()
|
2020-08-13 08:24:36 +00:00
|
|
|
home.value = loadHome.await()
|
2020-05-23 15:09:07 +00:00
|
|
|
}
|
|
|
|
|
2020-08-13 08:24:36 +00:00
|
|
|
private val loadHome: Deferred<List<Home>>
|
2020-08-13 17:08:37 +00:00
|
|
|
get() = viewModelScope.async { realRepository.homeSections() }
|
2020-05-23 15:09:07 +00:00
|
|
|
|
|
|
|
private val loadSongs: Deferred<List<Song>>
|
2020-08-13 17:08:37 +00:00
|
|
|
get() = viewModelScope.async(IO) { realRepository.allSongs() }
|
2020-05-23 15:09:07 +00:00
|
|
|
|
|
|
|
private val loadAlbums: Deferred<List<Album>>
|
|
|
|
get() = viewModelScope.async(IO) {
|
2020-08-13 17:08:37 +00:00
|
|
|
realRepository.allAlbums()
|
2020-05-23 15:09:07 +00:00
|
|
|
}
|
2020-05-25 22:40:40 +00:00
|
|
|
|
2020-05-23 15:09:07 +00:00
|
|
|
private val loadArtists: Deferred<List<Artist>>
|
|
|
|
get() = viewModelScope.async(IO) {
|
2020-08-14 08:34:03 +00:00
|
|
|
realRepository.albumArtists()
|
2020-05-23 15:09:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private val loadPlaylists: Deferred<List<Playlist>>
|
|
|
|
get() = viewModelScope.async(IO) {
|
2020-08-13 17:08:37 +00:00
|
|
|
realRepository.allPlaylists()
|
2020-05-23 15:09:07 +00:00
|
|
|
}
|
2020-08-20 06:49:08 +00:00
|
|
|
private val loadPlaylistsWithSongs: Deferred<List<PlaylistWithSongs>>
|
|
|
|
get() = viewModelScope.async(IO) {
|
|
|
|
realRepository.playlistWithSongs()
|
|
|
|
}
|
2020-05-23 15:09:07 +00:00
|
|
|
|
|
|
|
private val loadGenres: Deferred<List<Genre>>
|
|
|
|
get() = viewModelScope.async(IO) {
|
2020-08-13 17:08:37 +00:00
|
|
|
realRepository.allGenres()
|
2020-05-23 15:09:07 +00:00
|
|
|
}
|
|
|
|
|
2020-08-13 08:24:36 +00:00
|
|
|
|
2020-05-23 15:09:07 +00:00
|
|
|
fun forceReload(reloadType: ReloadType) = viewModelScope.launch {
|
|
|
|
when (reloadType) {
|
2020-07-28 19:18:34 +00:00
|
|
|
Songs -> songs.value = loadSongs.await()
|
|
|
|
Albums -> albums.value = loadAlbums.await()
|
|
|
|
Artists -> artists.value = loadArtists.await()
|
2020-08-20 06:49:08 +00:00
|
|
|
HomeSections -> home.value = loadHome.await()
|
2020-08-20 09:52:38 +00:00
|
|
|
Playlists -> roomPlaylists.value = loadPlaylistsWithSongs.await()
|
|
|
|
Genres -> genres.value = loadGenres.await()
|
2020-05-23 15:09:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-28 19:18:34 +00:00
|
|
|
fun updateColor(newColor: Int) {
|
|
|
|
paletteColor.postValue(newColor)
|
|
|
|
}
|
|
|
|
|
2020-05-23 15:09:07 +00:00
|
|
|
override fun onMediaStoreChanged() {
|
|
|
|
loadLibraryContent()
|
2020-08-13 08:24:36 +00:00
|
|
|
println("onMediaStoreChanged")
|
2020-05-23 15:09:07 +00:00
|
|
|
}
|
|
|
|
|
2020-08-13 08:24:36 +00:00
|
|
|
|
|
|
|
override fun onServiceConnected() {
|
|
|
|
println("onServiceConnected")
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onServiceDisconnected() {
|
|
|
|
println("onServiceDisconnected")
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onQueueChanged() {
|
|
|
|
println("onQueueChanged")
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onPlayingMetaChanged() {
|
|
|
|
println("onPlayingMetaChanged")
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onPlayStateChanged() {
|
|
|
|
println("onPlayStateChanged")
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onRepeatModeChanged() {
|
|
|
|
println("onRepeatModeChanged")
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onShuffleModeChanged() {
|
|
|
|
println("onShuffleModeChanged")
|
|
|
|
}
|
2020-07-28 19:18:34 +00:00
|
|
|
|
2020-05-23 15:09:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
enum class ReloadType {
|
|
|
|
Songs,
|
|
|
|
Albums,
|
|
|
|
Artists,
|
2020-08-20 09:52:38 +00:00
|
|
|
HomeSections,
|
|
|
|
Playlists,
|
|
|
|
Genres,
|
2020-05-23 15:09:07 +00:00
|
|
|
}
|