From 051ba23b58ce3004a33b2e4be673ae37807eb3fe Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Fri, 30 Jul 2021 14:27:00 +0200 Subject: [PATCH] Implementation of playlist page visualization --- .../play/repository/PlaylistRepository.java | 23 +++++++++++++++++++ .../api/playlist/PlaylistService.java | 5 ++-- .../subsonic/models/SubsonicResponse.java | 2 +- .../ui/fragment/PlaylistPageFragment.java | 2 +- .../play/viewmodel/PlaylistPageViewModel.java | 20 ++++++---------- 5 files changed, 35 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/play/repository/PlaylistRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/PlaylistRepository.java index 26f84ff2..59dfe726 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/PlaylistRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/PlaylistRepository.java @@ -7,6 +7,7 @@ import androidx.lifecycle.MutableLiveData; import com.cappielloantonio.play.App; import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Playlist; +import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.subsonic.models.ResponseStatus; import com.cappielloantonio.play.subsonic.models.SubsonicResponse; import com.cappielloantonio.play.util.MappingUtil; @@ -24,6 +25,7 @@ public class PlaylistRepository { private MutableLiveData> listLivePlaylists = new MutableLiveData<>(new ArrayList<>()); private MutableLiveData> listLiveRandomPlaylist = new MutableLiveData<>(new ArrayList<>()); + private MutableLiveData> listLivePlaylistSongs = new MutableLiveData<>(new ArrayList<>()); public PlaylistRepository(Application application) { this.application = application; @@ -51,4 +53,25 @@ public class PlaylistRepository { return listLivePlaylists; } + + public MutableLiveData> getPlaylistSongs(String id) { + App.getSubsonicClientInstance(application, false) + .getPlaylistClient() + .getPlaylist(id) + .enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) { + List songs = new ArrayList<>(MappingUtil.mapSong(response.body().getPlaylist().getEntries())); + listLivePlaylistSongs.setValue(songs); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + } + }); + + return listLivePlaylistSongs; + } } diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/api/playlist/PlaylistService.java b/app/src/main/java/com/cappielloantonio/play/subsonic/api/playlist/PlaylistService.java index 42a0e0ae..43f8e85d 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/api/playlist/PlaylistService.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/api/playlist/PlaylistService.java @@ -6,12 +6,13 @@ import java.util.Map; import retrofit2.Call; import retrofit2.http.GET; +import retrofit2.http.Query; import retrofit2.http.QueryMap; public interface PlaylistService { @GET("getPlaylists") Call getPlaylists(@QueryMap Map params); - @GET("getPlaylist?id={id}") - Call getPlaylist(@QueryMap Map params, String id); + @GET("getPlaylist") + Call getPlaylist(@QueryMap Map params, @Query("id") String id); } diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/models/SubsonicResponse.java b/app/src/main/java/com/cappielloantonio/play/subsonic/models/SubsonicResponse.java index faef92ab..96163e6b 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/models/SubsonicResponse.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/models/SubsonicResponse.java @@ -40,7 +40,7 @@ public class SubsonicResponse { private License license; private JukeboxPlaylist jukeboxPlaylist; private JukeboxStatus jukeboxStatus; - @Element + @Element(name = "playlist") private PlaylistWithSongs playlist; @Element private Playlists playlists; diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java index e464df03..20cd48e2 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java @@ -88,7 +88,7 @@ public class PlaylistPageFragment extends Fragment { public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.action_download_playlist: - DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(playlistPageViewModel.getPlaylistSongList()); + DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(playlistPageViewModel.getPlaylistSongLiveList().getValue()); return true; default: break; diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistPageViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistPageViewModel.java index b27416da..6ab2bb36 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistPageViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistPageViewModel.java @@ -5,38 +5,32 @@ import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Song; -import com.cappielloantonio.play.repository.SongRepository; +import com.cappielloantonio.play.repository.PlaylistRepository; import java.util.List; public class PlaylistPageViewModel extends AndroidViewModel { - private static final String TAG = "PlaylistPageViewModel"; + private PlaylistRepository playlistRepository; - private SongRepository songRepository; - - private LiveData> songLiveList; + private MutableLiveData> songLiveList = new MutableLiveData<>(); private Playlist playlist; public PlaylistPageViewModel(@NonNull Application application) { super(application); - songRepository = new SongRepository(application); + playlistRepository = new PlaylistRepository(application); } - public LiveData> getPlaylistSongLiveList() { - // songLiveList = songRepository.getPlaylistLiveSong(playlist.getId()); + public MutableLiveData> getPlaylistSongLiveList() { + songLiveList = playlistRepository.getPlaylistSongs(playlist.getId()); return songLiveList; } - public List getPlaylistSongList() { - // return songRepository.getPlaylistSong(playlist.getId()); - return null; - } - public Playlist getPlaylist() { return playlist; }