mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2025-10-21 02:17:38 +00:00
-Fix play queue remove.
-Fix player discontinuity refresh.
This commit is contained in:

committed by
John Zhen Mo

parent
73f46d3762
commit
a91ef2ce9e
@@ -550,7 +550,7 @@ public abstract class BasePlayer implements Player.EventListener,
|
||||
@Override
|
||||
public void onPositionDiscontinuity() {
|
||||
int newIndex = simpleExoPlayer.getCurrentWindowIndex();
|
||||
playbackManager.refresh(newIndex);
|
||||
if (playbackManager.getCurrentSourceIndex() != newIndex) playbackManager.refresh(newIndex);
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
|
@@ -19,6 +19,7 @@ import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
public class ExternalPlayQueue extends PlayQueue {
|
||||
private final String TAG = "ExternalPlayQueue@" + Integer.toHexString(hashCode());
|
||||
private static final int RETRY_COUNT = 2;
|
||||
|
||||
private boolean isComplete;
|
||||
|
||||
@@ -55,7 +56,7 @@ public class ExternalPlayQueue extends PlayQueue {
|
||||
ExtractorHelper.getPlaylistInfo(this.serviceId, this.playlistUrl, false)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.retry(2)
|
||||
.retry(RETRY_COUNT)
|
||||
.subscribe(getPlaylistObserver());
|
||||
}
|
||||
|
||||
|
@@ -45,7 +45,7 @@ public abstract class PlayQueue {
|
||||
streams = Collections.synchronizedList(new ArrayList<PlayQueueItem>());
|
||||
streams.addAll(startWith);
|
||||
|
||||
queueIndex = new AtomicInteger(97);
|
||||
queueIndex = new AtomicInteger(index);
|
||||
|
||||
eventBroadcast = BehaviorSubject.create();
|
||||
broadcastReceiver = eventBroadcast
|
||||
@@ -55,6 +55,10 @@ public abstract class PlayQueue {
|
||||
if (DEBUG) broadcastReceiver.subscribe(getSelfReporter());
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Playlist actions
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
// a queue is complete if it has loaded all items in an external playlist
|
||||
// single stream or local queues are always complete
|
||||
public abstract boolean isComplete();
|
||||
@@ -71,6 +75,10 @@ public abstract class PlayQueue {
|
||||
reportingReactor = null;
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Readonly ops
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
public PlayQueueItem getCurrent() {
|
||||
return streams.get(getIndex());
|
||||
}
|
||||
@@ -89,10 +97,6 @@ public abstract class PlayQueue {
|
||||
return broadcastReceiver;
|
||||
}
|
||||
|
||||
private void broadcast(final PlayQueueMessage event) {
|
||||
eventBroadcast.onNext(event);
|
||||
}
|
||||
|
||||
public int indexOf(final PlayQueueItem item) {
|
||||
// reference equality, can't think of a better way to do this
|
||||
// todo: better than this
|
||||
@@ -103,6 +107,10 @@ public abstract class PlayQueue {
|
||||
return queueIndex.get();
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Write ops
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
public void setIndex(final int index) {
|
||||
queueIndex.set(Math.min(Math.max(0, index), streams.size() - 1));
|
||||
broadcast(new SelectEvent(index));
|
||||
@@ -122,7 +130,10 @@ public abstract class PlayQueue {
|
||||
if (index >= streams.size()) return;
|
||||
|
||||
streams.remove(index);
|
||||
queueIndex.set(Math.max(0, queueIndex.get() - 1));
|
||||
// Nudge the index if it becomes larger than the queue size
|
||||
if (queueIndex.get() > size()) {
|
||||
queueIndex.set(size() - 1);
|
||||
}
|
||||
|
||||
broadcast(new RemoveEvent(index));
|
||||
}
|
||||
@@ -148,6 +159,14 @@ public abstract class PlayQueue {
|
||||
}
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Rx Broadcast
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
private void broadcast(final PlayQueueMessage event) {
|
||||
eventBroadcast.onNext(event);
|
||||
}
|
||||
|
||||
private Subscriber<PlayQueueMessage> getSelfReporter() {
|
||||
return new Subscriber<PlayQueueMessage>() {
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user