mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2024-12-26 10:00:39 +00:00
Simplified the removal of watched videos, into the function removeWatchedStreams
Replaced unnecessary nested class. Fixed formating issues
This commit is contained in:
parent
8cab790030
commit
98fc88dec6
@ -356,21 +356,7 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
|
|||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.menu_item_removeWatched:
|
case R.id.menu_item_removeWatched:
|
||||||
RemoveWatchedStreams remover = new RemoveWatchedStreams();
|
removeWatchedStreams();
|
||||||
|
|
||||||
remover.onPreExecute();
|
|
||||||
removeWatchedWorker = Flowable.just(playlistManager.getPlaylistStreams(playlistId).blockingFirst())
|
|
||||||
.subscribeOn(Schedulers.newThread())
|
|
||||||
.filter((@NonNull List<PlaylistStreamEntry> playlist) -> {
|
|
||||||
remover.doInBackground(playlist);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
).observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe(playlist -> {
|
|
||||||
remover.onPostExecute();
|
|
||||||
}, (@io.reactivex.annotations.NonNull Throwable throwable) -> {
|
|
||||||
onError(throwable);
|
|
||||||
});
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
@ -378,6 +364,82 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void removeWatchedStreams() {
|
||||||
|
showLoading();
|
||||||
|
|
||||||
|
if (removeWatchedWorker != null) {
|
||||||
|
// In case this is called twice
|
||||||
|
removeWatchedWorker.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
removeWatchedWorker = Flowable.just(playlistManager.getPlaylistStreams(playlistId).blockingFirst())
|
||||||
|
.subscribeOn(Schedulers.newThread())
|
||||||
|
.map((@NonNull List<PlaylistStreamEntry> playlist) -> {
|
||||||
|
List<PlaylistStreamEntry> localItems = new ArrayList<>();
|
||||||
|
boolean thumbnailVideoRemoved = false;
|
||||||
|
Long removedItemCount = 0l;
|
||||||
|
|
||||||
|
HistoryRecordManager recordManager = new HistoryRecordManager(getContext());
|
||||||
|
Iterator<StreamHistoryEntry> it_history;
|
||||||
|
StreamHistoryEntry history_item;
|
||||||
|
|
||||||
|
Iterator<PlaylistStreamEntry> it_playlist = playlist.iterator();
|
||||||
|
PlaylistStreamEntry playlist_item = null;
|
||||||
|
|
||||||
|
boolean isNonDuplicate;
|
||||||
|
|
||||||
|
while (it_playlist.hasNext()) {
|
||||||
|
playlist_item = it_playlist.next();
|
||||||
|
|
||||||
|
it_history = recordManager.getStreamHistory().blockingFirst().iterator();
|
||||||
|
|
||||||
|
isNonDuplicate = true;
|
||||||
|
while (it_history.hasNext()) {
|
||||||
|
history_item = it_history.next();
|
||||||
|
if (history_item.streamId == playlist_item.streamId) {
|
||||||
|
isNonDuplicate = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isNonDuplicate) {
|
||||||
|
localItems.add(playlist_item);
|
||||||
|
} else {
|
||||||
|
removedItemCount++;
|
||||||
|
if (playlistManager.getPlaylistThumbnail(playlistId).equals(playlist_item.thumbnailUrl)) {
|
||||||
|
thumbnailVideoRemoved = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Flowable.just(localItems, removedItemCount, thumbnailVideoRemoved);
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(
|
||||||
|
flow -> {
|
||||||
|
List<PlaylistStreamEntry> localItems = (List<PlaylistStreamEntry>) flow.blockingFirst();
|
||||||
|
Boolean thumbnailVideoRemoved = (Boolean) flow.blockingLast();
|
||||||
|
|
||||||
|
itemListAdapter.clearStreamItemList();
|
||||||
|
itemListAdapter.addItems(localItems);
|
||||||
|
localItems.clear();
|
||||||
|
|
||||||
|
if (thumbnailVideoRemoved)
|
||||||
|
updateThumbnailUrl();
|
||||||
|
|
||||||
|
int amountOfVideos = itemListAdapter.getItemsList().size();
|
||||||
|
setVideoCount(amountOfVideos);
|
||||||
|
|
||||||
|
saveChanges();
|
||||||
|
hideLoading();
|
||||||
|
|
||||||
|
if (amountOfVideos == 0)
|
||||||
|
showEmptyState();
|
||||||
|
}, (@io.reactivex.annotations.NonNull Throwable throwable) -> {
|
||||||
|
onError(throwable);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleResult(@NonNull final List<PlaylistStreamEntry> result) {
|
public void handleResult(@NonNull final List<PlaylistStreamEntry> result) {
|
||||||
super.handleResult(result);
|
super.handleResult(result);
|
||||||
@ -731,75 +793,5 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
|
|||||||
}
|
}
|
||||||
return new SinglePlayQueue(streamInfoItems, index);
|
return new SinglePlayQueue(streamInfoItems, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class RemoveWatchedStreams{
|
|
||||||
List<PlaylistStreamEntry> localItems = new ArrayList<>();
|
|
||||||
Long RemovedItemCount = 0l;
|
|
||||||
boolean thumbnailVideoRemoved = false;
|
|
||||||
|
|
||||||
// Do this in the main thread
|
|
||||||
protected void onPreExecute() {
|
|
||||||
showLoading();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do not do this in the main thread
|
|
||||||
protected Long doInBackground(List<PlaylistStreamEntry> playlist) {
|
|
||||||
|
|
||||||
HistoryRecordManager recordManager = new HistoryRecordManager(getContext());
|
|
||||||
Iterator<StreamHistoryEntry> it_history;
|
|
||||||
StreamHistoryEntry history_item;
|
|
||||||
|
|
||||||
Iterator<PlaylistStreamEntry> it_playlist = playlist.iterator();
|
|
||||||
PlaylistStreamEntry playlist_item = null;
|
|
||||||
|
|
||||||
boolean isNonDuplicate;
|
|
||||||
|
|
||||||
while (it_playlist.hasNext()) {
|
|
||||||
playlist_item = it_playlist.next();
|
|
||||||
|
|
||||||
it_history = recordManager.getStreamHistory().blockingFirst().iterator();
|
|
||||||
|
|
||||||
isNonDuplicate = true;
|
|
||||||
while (it_history.hasNext()) {
|
|
||||||
history_item = it_history.next();
|
|
||||||
if (history_item.streamId == playlist_item.streamId) {
|
|
||||||
isNonDuplicate = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isNonDuplicate) {
|
|
||||||
localItems.add(playlist_item);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
RemovedItemCount++;
|
|
||||||
if(playlistManager.getPlaylistThumbnail(playlistId).equals(playlist_item.thumbnailUrl))
|
|
||||||
{
|
|
||||||
thumbnailVideoRemoved = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return this.RemovedItemCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do this in the main thread
|
|
||||||
protected void onPostExecute() {
|
|
||||||
itemListAdapter.clearStreamItemList();
|
|
||||||
itemListAdapter.addItems(localItems);
|
|
||||||
localItems.clear();
|
|
||||||
|
|
||||||
if (thumbnailVideoRemoved)
|
|
||||||
updateThumbnailUrl();
|
|
||||||
|
|
||||||
int amountOfVideos = itemListAdapter.getItemsList().size();
|
|
||||||
setVideoCount(amountOfVideos);
|
|
||||||
|
|
||||||
saveChanges();
|
|
||||||
hideLoading();
|
|
||||||
|
|
||||||
if(amountOfVideos == 0)
|
|
||||||
showEmptyState();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user