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> getPlaylists() { return playlistRemoteTable.getPlaylists().subscribeOn(Schedulers.io()); } public Flowable> getPlaylist(final PlaylistInfo info) { return playlistRemoteTable.getPlaylist(info.getServiceId(), info.getUrl()) .subscribeOn(Schedulers.io()); } public Single deletePlaylist(final long playlistId) { return Single.fromCallable(() -> playlistRemoteTable.deletePlaylist(playlistId)) .subscribeOn(Schedulers.io()); } public Completable updatePlaylists(final List updateItems, final List 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 onBookmark(final PlaylistInfo playlistInfo) { return Single.fromCallable(() -> { final PlaylistRemoteEntity playlist = new PlaylistRemoteEntity(playlistInfo); return playlistRemoteTable.upsert(playlist); }).subscribeOn(Schedulers.io()); } public Single 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()); } }