Merge pull request #3704 from Stypox/keep-failed-streams

Do not remove items generating errors form queue
This commit is contained in:
wb9688 2020-06-15 15:16:26 +02:00 committed by GitHub
commit 5cfd8bbb56
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 7 additions and 35 deletions

View file

@ -64,7 +64,6 @@ import org.schabi.newpipe.player.helper.LoadController;
import org.schabi.newpipe.player.helper.MediaSessionManager;
import org.schabi.newpipe.player.helper.PlayerDataSource;
import org.schabi.newpipe.player.helper.PlayerHelper;
import org.schabi.newpipe.player.mediasource.FailedMediaSource;
import org.schabi.newpipe.player.playback.BasePlayerMediaSession;
import org.schabi.newpipe.player.playback.CustomTrackSelector;
import org.schabi.newpipe.player.playback.MediaSourceManager;
@ -77,7 +76,6 @@ import org.schabi.newpipe.util.ImageDisplayConstants;
import org.schabi.newpipe.util.SerializedCache;
import java.io.IOException;
import java.net.UnknownHostException;
import io.reactivex.Observable;
import io.reactivex.disposables.CompositeDisposable;
@ -835,16 +833,8 @@ public abstract class BasePlayer implements
final Throwable cause = error.getCause();
if (error instanceof BehindLiveWindowException) {
reload();
} else if (cause instanceof UnknownHostException) {
playQueue.error(/*isNetworkProblem=*/true);
} else if (isCurrentWindowValid()) {
playQueue.error(/*isTransitioningToBadStream=*/true);
} else if (cause instanceof FailedMediaSource.MediaSourceResolutionException) {
playQueue.error(/*recoverableWithNoAvailableStream=*/false);
} else if (cause instanceof FailedMediaSource.StreamInfoLoadException) {
playQueue.error(/*recoverableIfLoadFailsWhenNetworkIsFine=*/false);
} else {
playQueue.error(/*noIdeaWhatHappenedAndLetUserChooseWhatToDo=*/true);
playQueue.error();
}
}

View file

@ -305,25 +305,16 @@ public abstract class PlayQueue implements Serializable {
}
/**
* Report an exception for the item at the current index in order and the course of action:
* if the error can be skipped or the current item should be removed.
* Report an exception for the item at the current index in order and skip to the next one
* <p>
* This is done as a separate event as the underlying manager may have
* different implementation regarding exceptions.
* </p>
*
* @param skippable whether the error could be skipped
*/
public synchronized void error(final boolean skippable) {
final int index = getIndex();
if (skippable) {
public synchronized void error() {
final int oldIndex = getIndex();
queueIndex.incrementAndGet();
} else {
removeInternal(index);
}
broadcast(new ErrorEvent(index, getIndex(), skippable));
broadcast(new ErrorEvent(oldIndex, getIndex()));
}
private synchronized void removeInternal(final int removeIndex) {

View file

@ -115,9 +115,6 @@ public class PlayQueueAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
break;
case ERROR:
final ErrorEvent errorEvent = (ErrorEvent) message;
if (!errorEvent.isSkippable()) {
notifyItemRemoved(errorEvent.getErrorIndex());
}
notifyItemChanged(errorEvent.getErrorIndex());
notifyItemChanged(errorEvent.getQueueIndex());
break;

View file

@ -3,12 +3,10 @@ package org.schabi.newpipe.player.playqueue.events;
public class ErrorEvent implements PlayQueueEvent {
private final int errorIndex;
private final int queueIndex;
private final boolean skippable;
public ErrorEvent(final int errorIndex, final int queueIndex, final boolean skippable) {
public ErrorEvent(final int errorIndex, final int queueIndex) {
this.errorIndex = errorIndex;
this.queueIndex = queueIndex;
this.skippable = skippable;
}
@Override
@ -23,8 +21,4 @@ public class ErrorEvent implements PlayQueueEvent {
public int getQueueIndex() {
return queueIndex;
}
public boolean isSkippable() {
return skippable;
}
}