mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2024-06-16 10:19:59 +00:00
66 lines
2.5 KiB
Java
66 lines
2.5 KiB
Java
package org.schabi.newpipe.local.playlist;
|
|
|
|
import org.schabi.newpipe.database.AppDatabase;
|
|
import org.schabi.newpipe.database.playlist.dao.PlaylistRemoteDAO;
|
|
import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
|
|
import org.schabi.newpipe.extractor.playlist.PlaylistInfo;
|
|
|
|
import java.util.List;
|
|
|
|
import io.reactivex.rxjava3.core.Completable;
|
|
import io.reactivex.rxjava3.core.Flowable;
|
|
import io.reactivex.rxjava3.core.Single;
|
|
import io.reactivex.rxjava3.schedulers.Schedulers;
|
|
|
|
public class RemotePlaylistManager {
|
|
|
|
private final AppDatabase database;
|
|
private final PlaylistRemoteDAO playlistRemoteTable;
|
|
|
|
public RemotePlaylistManager(final AppDatabase db) {
|
|
database = db;
|
|
playlistRemoteTable = db.playlistRemoteDAO();
|
|
}
|
|
|
|
public Flowable<List<PlaylistRemoteEntity>> getPlaylists() {
|
|
return playlistRemoteTable.getPlaylists().subscribeOn(Schedulers.io());
|
|
}
|
|
|
|
public Flowable<List<PlaylistRemoteEntity>> getPlaylist(final PlaylistInfo info) {
|
|
return playlistRemoteTable.getPlaylist(info.getServiceId(), info.getUrl())
|
|
.subscribeOn(Schedulers.io());
|
|
}
|
|
|
|
public Single<Integer> deletePlaylist(final long playlistId) {
|
|
return Single.fromCallable(() -> playlistRemoteTable.deletePlaylist(playlistId))
|
|
.subscribeOn(Schedulers.io());
|
|
}
|
|
|
|
public Completable updatePlaylists(final List<PlaylistRemoteEntity> updateItems,
|
|
final List<Long> deletedItems) {
|
|
return Completable.fromRunnable(() -> database.runInTransaction(() -> {
|
|
for (final Long uid: deletedItems) {
|
|
playlistRemoteTable.deletePlaylist(uid);
|
|
}
|
|
for (final PlaylistRemoteEntity item: updateItems) {
|
|
playlistRemoteTable.upsert(item);
|
|
}
|
|
})).subscribeOn(Schedulers.io());
|
|
}
|
|
|
|
public Single<Long> onBookmark(final PlaylistInfo playlistInfo) {
|
|
return Single.fromCallable(() -> {
|
|
final PlaylistRemoteEntity playlist = new PlaylistRemoteEntity(playlistInfo);
|
|
return playlistRemoteTable.upsert(playlist);
|
|
}).subscribeOn(Schedulers.io());
|
|
}
|
|
|
|
public Single<Integer> onUpdate(final long playlistId, final PlaylistInfo playlistInfo) {
|
|
return Single.fromCallable(() -> {
|
|
final PlaylistRemoteEntity playlist = new PlaylistRemoteEntity(playlistInfo);
|
|
playlist.setUid(playlistId);
|
|
return playlistRemoteTable.update(playlist);
|
|
}).subscribeOn(Schedulers.io());
|
|
}
|
|
}
|