package com.cappielloantonio.tempo.viewmodel; import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import com.cappielloantonio.tempo.repository.AlbumRepository; import com.cappielloantonio.tempo.repository.ArtistRepository; import com.cappielloantonio.tempo.repository.DirectoryRepository; import com.cappielloantonio.tempo.repository.GenreRepository; import com.cappielloantonio.tempo.repository.PlaylistRepository; import com.cappielloantonio.tempo.subsonic.models.AlbumID3; import com.cappielloantonio.tempo.subsonic.models.ArtistID3; import com.cappielloantonio.tempo.subsonic.models.Genre; import com.cappielloantonio.tempo.subsonic.models.Indexes; import com.cappielloantonio.tempo.subsonic.models.MusicFolder; import com.cappielloantonio.tempo.subsonic.models.Playlist; import java.util.List; public class LibraryViewModel extends AndroidViewModel { private static final String TAG = "LibraryViewModel"; private final DirectoryRepository directoryRepository; private final AlbumRepository albumRepository; private final ArtistRepository artistRepository; private final GenreRepository genreRepository; private final PlaylistRepository playlistRepository; private final MutableLiveData> musicFolders = new MutableLiveData<>(null); private final MutableLiveData indexes = new MutableLiveData<>(null); private final MutableLiveData> playlistSample = new MutableLiveData<>(null); private final MutableLiveData> sampleAlbum = new MutableLiveData<>(null); private final MutableLiveData> sampleArtist = new MutableLiveData<>(null); private final MutableLiveData> sampleGenres = new MutableLiveData<>(null); public LibraryViewModel(@NonNull Application application) { super(application); directoryRepository = new DirectoryRepository(); albumRepository = new AlbumRepository(); artistRepository = new ArtistRepository(); genreRepository = new GenreRepository(); playlistRepository = new PlaylistRepository(); } public LiveData> getMusicFolders(LifecycleOwner owner) { if (musicFolders.getValue() == null) { directoryRepository.getMusicFolders().observe(owner, musicFolders::postValue); } return musicFolders; } public LiveData getIndexes(LifecycleOwner owner) { if (indexes.getValue() == null) { directoryRepository.getIndexes("0", null).observe(owner, indexes::postValue); } return indexes; } public LiveData> getAlbumSample(LifecycleOwner owner) { if (sampleAlbum.getValue() == null) { albumRepository.getAlbums("random", 10, null, null).observe(owner, sampleAlbum::postValue); } return sampleAlbum; } public LiveData> getArtistSample(LifecycleOwner owner) { if (sampleArtist.getValue() == null) { artistRepository.getArtists(true, 10).observe(owner, sampleArtist::postValue); } return sampleArtist; } public LiveData> getGenreSample(LifecycleOwner owner) { if (sampleGenres.getValue() == null) { genreRepository.getGenres(true, 15).observe(owner, sampleGenres::postValue); } return sampleGenres; } public LiveData> getPlaylistSample(LifecycleOwner owner) { if (playlistSample.getValue() == null) { playlistRepository.getPlaylists(true, 10).observe(owner, playlistSample::postValue); } return playlistSample; } public void refreshAlbumSample(LifecycleOwner owner) { albumRepository.getAlbums("random", 10, null, null).observe(owner, sampleAlbum::postValue); } public void refreshArtistSample(LifecycleOwner owner) { artistRepository.getArtists(true, 10).observe(owner, sampleArtist::postValue); } public void refreshGenreSample(LifecycleOwner owner) { genreRepository.getGenres(true, 15).observe(owner, sampleGenres::postValue); } public void refreshPlaylistSample(LifecycleOwner owner) { playlistRepository.getPlaylists(true, 10).observe(owner, playlistSample::postValue); } }