mirror of
https://github.com/antebudimir/tempus.git
synced 2026-01-01 09:53:33 +00:00
feat: created and invoked methods for checking starred/unstarred items from favorites when offline
This commit is contained in:
parent
888f177597
commit
9c0ebca66f
1 changed files with 114 additions and 1 deletions
|
|
@ -8,20 +8,24 @@ import androidx.lifecycle.LifecycleOwner;
|
||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
|
import com.cappielloantonio.tempo.interfaces.StarCallback;
|
||||||
import com.cappielloantonio.tempo.model.Chronology;
|
import com.cappielloantonio.tempo.model.Chronology;
|
||||||
|
import com.cappielloantonio.tempo.model.Favorite;
|
||||||
import com.cappielloantonio.tempo.repository.AlbumRepository;
|
import com.cappielloantonio.tempo.repository.AlbumRepository;
|
||||||
import com.cappielloantonio.tempo.repository.ArtistRepository;
|
import com.cappielloantonio.tempo.repository.ArtistRepository;
|
||||||
import com.cappielloantonio.tempo.repository.ChronologyRepository;
|
import com.cappielloantonio.tempo.repository.ChronologyRepository;
|
||||||
import com.cappielloantonio.tempo.repository.PodcastRepository;
|
import com.cappielloantonio.tempo.repository.FavoriteRepository;
|
||||||
import com.cappielloantonio.tempo.repository.SongRepository;
|
import com.cappielloantonio.tempo.repository.SongRepository;
|
||||||
import com.cappielloantonio.tempo.subsonic.models.AlbumID3;
|
import com.cappielloantonio.tempo.subsonic.models.AlbumID3;
|
||||||
import com.cappielloantonio.tempo.subsonic.models.ArtistID3;
|
import com.cappielloantonio.tempo.subsonic.models.ArtistID3;
|
||||||
import com.cappielloantonio.tempo.subsonic.models.Child;
|
import com.cappielloantonio.tempo.subsonic.models.Child;
|
||||||
import com.cappielloantonio.tempo.util.Preferences;
|
import com.cappielloantonio.tempo.util.Preferences;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class HomeViewModel extends AndroidViewModel {
|
public class HomeViewModel extends AndroidViewModel {
|
||||||
|
|
@ -31,6 +35,7 @@ public class HomeViewModel extends AndroidViewModel {
|
||||||
private final AlbumRepository albumRepository;
|
private final AlbumRepository albumRepository;
|
||||||
private final ArtistRepository artistRepository;
|
private final ArtistRepository artistRepository;
|
||||||
private final ChronologyRepository chronologyRepository;
|
private final ChronologyRepository chronologyRepository;
|
||||||
|
private final FavoriteRepository favoriteRepository;
|
||||||
|
|
||||||
private final MutableLiveData<List<Child>> dicoverSongSample = new MutableLiveData<>(null);
|
private final MutableLiveData<List<Child>> dicoverSongSample = new MutableLiveData<>(null);
|
||||||
private final MutableLiveData<List<AlbumID3>> newReleasedAlbum = new MutableLiveData<>(null);
|
private final MutableLiveData<List<AlbumID3>> newReleasedAlbum = new MutableLiveData<>(null);
|
||||||
|
|
@ -57,6 +62,9 @@ public class HomeViewModel extends AndroidViewModel {
|
||||||
albumRepository = new AlbumRepository();
|
albumRepository = new AlbumRepository();
|
||||||
artistRepository = new ArtistRepository();
|
artistRepository = new ArtistRepository();
|
||||||
chronologyRepository = new ChronologyRepository();
|
chronologyRepository = new ChronologyRepository();
|
||||||
|
favoriteRepository = new FavoriteRepository();
|
||||||
|
|
||||||
|
setOfflineFavorite();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Child>> getDiscoverSongSample(LifecycleOwner owner) {
|
public LiveData<List<Child>> getDiscoverSongSample(LifecycleOwner owner) {
|
||||||
|
|
@ -239,4 +247,109 @@ public class HomeViewModel extends AndroidViewModel {
|
||||||
public void refreshRecentlyPlayedAlbumList(LifecycleOwner owner) {
|
public void refreshRecentlyPlayedAlbumList(LifecycleOwner owner) {
|
||||||
albumRepository.getAlbums("recent", 20, null, null).observe(owner, recentlyPlayedAlbumSample::postValue);
|
albumRepository.getAlbums("recent", 20, null, null).observe(owner, recentlyPlayedAlbumSample::postValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setOfflineFavorite() {
|
||||||
|
ArrayList<Favorite> favorites = getFavorites();
|
||||||
|
ArrayList<Favorite> favoritesToSave = getFavoritesToSave(favorites);
|
||||||
|
ArrayList<Favorite> favoritesToDelete = getFavoritesToDelete(favorites, favoritesToSave);
|
||||||
|
|
||||||
|
manageFavoriteToSave(favoritesToSave);
|
||||||
|
manageFavoriteToDelete(favoritesToDelete);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArrayList<Favorite> getFavorites() {
|
||||||
|
return new ArrayList<>(favoriteRepository.getFavorites());
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArrayList<Favorite> getFavoritesToSave(ArrayList<Favorite> favorites) {
|
||||||
|
HashMap<String, Favorite> filteredMap = new HashMap<>();
|
||||||
|
|
||||||
|
for (Favorite favorite : favorites) {
|
||||||
|
String key = favorite.toString();
|
||||||
|
|
||||||
|
if (!filteredMap.containsKey(key) || favorite.getTimestamp() > filteredMap.get(key).getTimestamp()) {
|
||||||
|
filteredMap.put(key, favorite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ArrayList<>(filteredMap.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArrayList<Favorite> getFavoritesToDelete(ArrayList<Favorite> favorites, ArrayList<Favorite> favoritesToSave) {
|
||||||
|
ArrayList<Favorite> favoritesToDelete = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Favorite favorite : favorites) {
|
||||||
|
if (!favoritesToSave.contains(favorite)) {
|
||||||
|
favoritesToDelete.add(favorite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return favoritesToDelete;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void manageFavoriteToSave(ArrayList<Favorite> favoritesToSave) {
|
||||||
|
for (Favorite favorite : favoritesToSave) {
|
||||||
|
if (favorite.getToStar()) {
|
||||||
|
favoriteToStar(favorite);
|
||||||
|
} else {
|
||||||
|
favoriteToUnstar(favorite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void manageFavoriteToDelete(ArrayList<Favorite> favoritesToDelete) {
|
||||||
|
for (Favorite favorite : favoritesToDelete) {
|
||||||
|
favoriteRepository.delete(favorite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void favoriteToStar(Favorite favorite) {
|
||||||
|
if (favorite.getSongId() != null) {
|
||||||
|
favoriteRepository.star(favorite.getSongId(), null, null, new StarCallback() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess() {
|
||||||
|
favoriteRepository.delete(favorite);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (favorite.getAlbumId() != null) {
|
||||||
|
favoriteRepository.star(null, favorite.getAlbumId(), null, new StarCallback() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess() {
|
||||||
|
favoriteRepository.delete(favorite);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (favorite.getArtistId() != null) {
|
||||||
|
favoriteRepository.star(null, null, favorite.getArtistId(), new StarCallback() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess() {
|
||||||
|
favoriteRepository.delete(favorite);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void favoriteToUnstar(Favorite favorite) {
|
||||||
|
if (favorite.getSongId() != null) {
|
||||||
|
favoriteRepository.unstar(favorite.getSongId(), null, null, new StarCallback() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess() {
|
||||||
|
favoriteRepository.delete(favorite);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (favorite.getAlbumId() != null) {
|
||||||
|
favoriteRepository.unstar(null, favorite.getAlbumId(), null, new StarCallback() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess() {
|
||||||
|
favoriteRepository.delete(favorite);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (favorite.getArtistId() != null) {
|
||||||
|
favoriteRepository.unstar(null, null, favorite.getArtistId(), new StarCallback() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess() {
|
||||||
|
favoriteRepository.delete(favorite);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue