Implementation of playlist page visualization

This commit is contained in:
CappielloAntonio 2021-07-30 14:27:00 +02:00
parent 95bcbb0f61
commit 051ba23b58
5 changed files with 35 additions and 17 deletions

View file

@ -7,6 +7,7 @@ import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.App; import com.cappielloantonio.play.App;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Playlist; 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.ResponseStatus;
import com.cappielloantonio.play.subsonic.models.SubsonicResponse; import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.util.MappingUtil;
@ -24,6 +25,7 @@ public class PlaylistRepository {
private MutableLiveData<List<Playlist>> listLivePlaylists = new MutableLiveData<>(new ArrayList<>()); private MutableLiveData<List<Playlist>> listLivePlaylists = new MutableLiveData<>(new ArrayList<>());
private MutableLiveData<List<Playlist>> listLiveRandomPlaylist = new MutableLiveData<>(new ArrayList<>()); private MutableLiveData<List<Playlist>> listLiveRandomPlaylist = new MutableLiveData<>(new ArrayList<>());
private MutableLiveData<List<Song>> listLivePlaylistSongs = new MutableLiveData<>(new ArrayList<>());
public PlaylistRepository(Application application) { public PlaylistRepository(Application application) {
this.application = application; this.application = application;
@ -51,4 +53,25 @@ public class PlaylistRepository {
return listLivePlaylists; return listLivePlaylists;
} }
public MutableLiveData<List<Song>> getPlaylistSongs(String id) {
App.getSubsonicClientInstance(application, false)
.getPlaylistClient()
.getPlaylist(id)
.enqueue(new Callback<SubsonicResponse>() {
@Override
public void onResponse(Call<SubsonicResponse> call, Response<SubsonicResponse> response) {
if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) {
List<Song> songs = new ArrayList<>(MappingUtil.mapSong(response.body().getPlaylist().getEntries()));
listLivePlaylistSongs.setValue(songs);
}
}
@Override
public void onFailure(Call<SubsonicResponse> call, Throwable t) {
}
});
return listLivePlaylistSongs;
}
} }

View file

@ -6,12 +6,13 @@ import java.util.Map;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.Query;
import retrofit2.http.QueryMap; import retrofit2.http.QueryMap;
public interface PlaylistService { public interface PlaylistService {
@GET("getPlaylists") @GET("getPlaylists")
Call<SubsonicResponse> getPlaylists(@QueryMap Map<String, String> params); Call<SubsonicResponse> getPlaylists(@QueryMap Map<String, String> params);
@GET("getPlaylist?id={id}") @GET("getPlaylist")
Call<SubsonicResponse> getPlaylist(@QueryMap Map<String, String> params, String id); Call<SubsonicResponse> getPlaylist(@QueryMap Map<String, String> params, @Query("id") String id);
} }

View file

@ -40,7 +40,7 @@ public class SubsonicResponse {
private License license; private License license;
private JukeboxPlaylist jukeboxPlaylist; private JukeboxPlaylist jukeboxPlaylist;
private JukeboxStatus jukeboxStatus; private JukeboxStatus jukeboxStatus;
@Element @Element(name = "playlist")
private PlaylistWithSongs playlist; private PlaylistWithSongs playlist;
@Element @Element
private Playlists playlists; private Playlists playlists;

View file

@ -88,7 +88,7 @@ public class PlaylistPageFragment extends Fragment {
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.action_download_playlist: case R.id.action_download_playlist:
DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(playlistPageViewModel.getPlaylistSongList()); DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(playlistPageViewModel.getPlaylistSongLiveList().getValue());
return true; return true;
default: default:
break; break;

View file

@ -5,38 +5,32 @@ import android.app.Application;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.repository.PlaylistRepository;
import java.util.List; import java.util.List;
public class PlaylistPageViewModel extends AndroidViewModel { public class PlaylistPageViewModel extends AndroidViewModel {
private static final String TAG = "PlaylistPageViewModel"; private PlaylistRepository playlistRepository;
private SongRepository songRepository; private MutableLiveData<List<Song>> songLiveList = new MutableLiveData<>();
private LiveData<List<Song>> songLiveList;
private Playlist playlist; private Playlist playlist;
public PlaylistPageViewModel(@NonNull Application application) { public PlaylistPageViewModel(@NonNull Application application) {
super(application); super(application);
songRepository = new SongRepository(application); playlistRepository = new PlaylistRepository(application);
} }
public LiveData<List<Song>> getPlaylistSongLiveList() { public MutableLiveData<List<Song>> getPlaylistSongLiveList() {
// songLiveList = songRepository.getPlaylistLiveSong(playlist.getId()); songLiveList = playlistRepository.getPlaylistSongs(playlist.getId());
return songLiveList; return songLiveList;
} }
public List<Song> getPlaylistSongList() {
// return songRepository.getPlaylistSong(playlist.getId());
return null;
}
public Playlist getPlaylist() { public Playlist getPlaylist() {
return playlist; return playlist;
} }