Implementation of album and artist catalog recovery

This commit is contained in:
CappielloAntonio 2021-07-30 14:09:50 +02:00
parent 64cd8ed0ac
commit 98ffec9b72
15 changed files with 330 additions and 160 deletions

View file

@ -1,20 +1,35 @@
package com.cappielloantonio.play.viewmodel;
import android.app.Application;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.App;
import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.repository.AlbumRepository;
import com.cappielloantonio.play.subsonic.models.AlbumID3;
import com.cappielloantonio.play.subsonic.models.ResponseStatus;
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
import com.cappielloantonio.play.util.MappingUtil;
import java.util.ArrayList;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
public class AlbumCatalogueViewModel extends AndroidViewModel {
public LiveData<List<Album>> albumList;
private MutableLiveData<List<Album>> albumList = new MutableLiveData<>(new ArrayList<>());
private AlbumRepository albumRepository;
private String query = "";
private int page = 0;
public AlbumCatalogueViewModel(@NonNull Application application) {
super(application);
@ -23,10 +38,51 @@ public class AlbumCatalogueViewModel extends AndroidViewModel {
}
public LiveData<List<Album>> getAlbumList() {
// albumList = albumRepository.getListLiveAlbums();
return albumList;
}
public void loadAlbums(Context context, int size) {
retrieveAlbums(context, new MediaCallback() {
@Override
public void onError(Exception exception) {
}
@Override
public void onLoadMedia(List<?> media) {
List<Album> liveAlbum = albumList.getValue();
liveAlbum.addAll(MappingUtil.mapAlbum((List<AlbumID3>) media));
albumList.setValue(liveAlbum);
if (media.size() == size) {
loadAlbums(context, size);
}
}
}, size, size * page++);
}
private void retrieveAlbums(Context context, MediaCallback callback, int size, int offset) {
App.getSubsonicClientInstance(context, false)
.getAlbumSongListClient()
.getAlbumList2("alphabeticalByName", size, offset)
.enqueue(new Callback<SubsonicResponse>() {
@Override
public void onResponse(Call<SubsonicResponse> call, retrofit2.Response<SubsonicResponse> response) {
if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) {
List<AlbumID3> albumList = new ArrayList<>();
albumList.addAll(response.body().getAlbumList2().getAlbums());
callback.onLoadMedia(albumList);
}
}
@Override
public void onFailure(Call<SubsonicResponse> call, Throwable t) {
callback.onError(new Exception(t.getMessage()));
}
});
}
public String getQuery() {
return query;
}

View file

@ -5,10 +5,12 @@ 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.Album;
import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.repository.AlbumRepository;
import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.repository.SongRepository;
@ -16,9 +18,10 @@ import java.util.List;
public class AlbumPageViewModel extends AndroidViewModel {
private SongRepository songRepository;
private AlbumRepository albumRepository;
private ArtistRepository artistRepository;
private LiveData<List<Song>> songLiveList;
private LiveData<List<Song>> songLiveList = new MutableLiveData<>();
private Album album;
@ -26,19 +29,15 @@ public class AlbumPageViewModel extends AndroidViewModel {
super(application);
songRepository = new SongRepository(application);
albumRepository = new AlbumRepository(application);
artistRepository = new ArtistRepository(application);
}
public LiveData<List<Song>> getAlbumSongLiveList() {
// songLiveList = songRepository.getAlbumListLiveSong(album.getId());
songLiveList = albumRepository.getAlbumTracks(album.getId());
return songLiveList;
}
public List<Song> getAlbumSongList() {
// return songRepository.getAlbumListSong(album.getId(), false);
return null;
}
public Album getAlbum() {
return album;
}
@ -47,8 +46,7 @@ public class AlbumPageViewModel extends AndroidViewModel {
this.album = album;
}
public Artist getArtist() {
// return artistRepository.getArtistByID(album.getArtistId());
return null;
public LiveData<Artist> getArtist() {
return artistRepository.getArtistInfo(album.getArtistId());
}
}

View file

@ -1,20 +1,37 @@
package com.cappielloantonio.play.viewmodel;
import android.app.Application;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.App;
import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.subsonic.models.AlbumID3;
import com.cappielloantonio.play.subsonic.models.ArtistID3;
import com.cappielloantonio.play.subsonic.models.IndexID3;
import com.cappielloantonio.play.subsonic.models.ResponseStatus;
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
import com.cappielloantonio.play.util.MappingUtil;
import java.util.ArrayList;
import java.util.List;
public class ArtistCatalogueViewModel extends AndroidViewModel {
private ArtistRepository artistRepository;
import retrofit2.Call;
import retrofit2.Callback;
private LiveData<List<Artist>> artistList;
public class ArtistCatalogueViewModel extends AndroidViewModel {
private MutableLiveData<List<Artist>> artistList = new MutableLiveData<>(new ArrayList<>());
private ArtistRepository artistRepository;
private String query = "";
private int page = 0;
public ArtistCatalogueViewModel(@NonNull Application application) {
super(application);
@ -23,7 +40,39 @@ public class ArtistCatalogueViewModel extends AndroidViewModel {
}
public LiveData<List<Artist>> getArtistList() {
// artistList = artistRepository.getListLiveArtists();
return artistList;
}
public void loadArtists(Context context) {
App.getSubsonicClientInstance(context, false)
.getBrowsingClient()
.getArtists()
.enqueue(new Callback<SubsonicResponse>() {
@Override
public void onResponse(Call<SubsonicResponse> call, retrofit2.Response<SubsonicResponse> response) {
if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) {
List<ArtistID3> artists = new ArrayList<>();
for (IndexID3 index : response.body().getArtists().getIndices()) {
artists.addAll(index.getArtists());
}
artistList.setValue(MappingUtil.mapArtist(artists));
}
}
@Override
public void onFailure(Call<SubsonicResponse> call, Throwable t) {
}
});
}
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
}

View file

@ -5,22 +5,28 @@ 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.Album;
import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.repository.AlbumRepository;
import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.repository.SongRepository;
import java.util.ArrayList;
import java.util.List;
public class ArtistPageViewModel extends AndroidViewModel {
private SongRepository songRepository;
private AlbumRepository albumRepository;
private ArtistRepository artistRepository;
private List<Song> randomList;
private LiveData<List<Song>> songList;
private LiveData<List<Album>> albumList;
private List<Song> randomList = new ArrayList<>();
private LiveData<List<Song>> songList = new MutableLiveData<>();
private LiveData<List<Album>> albumList = new MutableLiveData<>();
private LiveData<List<Artist>> artistList = new MutableLiveData<>();
private LiveData<Artist> artistInfo = new MutableLiveData<>();
private Artist artist;
@ -29,13 +35,19 @@ public class ArtistPageViewModel extends AndroidViewModel {
songRepository = new SongRepository(application);
albumRepository = new AlbumRepository(application);
artistRepository = new ArtistRepository(application);
}
public LiveData<List<Album>> getAlbumList() {
// albumList = albumRepository.getArtistListLiveAlbums(artist.id);
albumList = albumRepository.getArtistAlbums(artist.id);
return albumList;
}
public LiveData<Artist> getArtistInfo(String id) {
artistInfo = artistRepository.getArtistFullInfo(id);
return artistInfo;
}
public List<Song> getArtistRandomSongList() {
// randomList = songRepository.getArtistListLiveRandomSong(artist.id);
return randomList;