Merge pull request #1878 from shivanju/auto_queue_logic
#1336 Fix for inserting new streams when auto queuing is enabled
This commit is contained in:
commit
ccd0f7d9cc
|
@ -145,7 +145,7 @@ public class PlayerHelper {
|
||||||
|
|
||||||
final StreamInfoItem nextVideo = info.getNextVideo();
|
final StreamInfoItem nextVideo = info.getNextVideo();
|
||||||
if (nextVideo != null && !urls.contains(nextVideo.getUrl())) {
|
if (nextVideo != null && !urls.contains(nextVideo.getUrl())) {
|
||||||
return new SinglePlayQueue(nextVideo);
|
return getAutoQueuedSinglePlayQueue(nextVideo);
|
||||||
}
|
}
|
||||||
|
|
||||||
final List<InfoItem> relatedItems = info.getRelatedStreams();
|
final List<InfoItem> relatedItems = info.getRelatedStreams();
|
||||||
|
@ -158,7 +158,7 @@ public class PlayerHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Collections.shuffle(autoQueueItems);
|
Collections.shuffle(autoQueueItems);
|
||||||
return autoQueueItems.isEmpty() ? null : new SinglePlayQueue(autoQueueItems.get(0));
|
return autoQueueItems.isEmpty() ? null : getAutoQueuedSinglePlayQueue(autoQueueItems.get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -350,4 +350,10 @@ public class PlayerHelper {
|
||||||
return getPreferences(context).getString(context.getString(R.string.minimize_on_exit_key),
|
return getPreferences(context).getString(context.getString(R.string.minimize_on_exit_key),
|
||||||
key);
|
key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static SinglePlayQueue getAutoQueuedSinglePlayQueue(StreamInfoItem streamInfoItem) {
|
||||||
|
SinglePlayQueue singlePlayQueue = new SinglePlayQueue(streamInfoItem);
|
||||||
|
singlePlayQueue.getItem().setAutoQueued(true);
|
||||||
|
return singlePlayQueue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -233,6 +233,9 @@ public abstract class PlayQueue implements Serializable {
|
||||||
backup.addAll(itemList);
|
backup.addAll(itemList);
|
||||||
Collections.shuffle(itemList);
|
Collections.shuffle(itemList);
|
||||||
}
|
}
|
||||||
|
if (!streams.isEmpty() && streams.get(streams.size() - 1).isAutoQueued() && !itemList.get(0).isAutoQueued()) {
|
||||||
|
streams.remove(streams.size() - 1);
|
||||||
|
}
|
||||||
streams.addAll(itemList);
|
streams.addAll(itemList);
|
||||||
|
|
||||||
broadcast(new AppendEvent(itemList.size()));
|
broadcast(new AppendEvent(itemList.size()));
|
||||||
|
@ -314,7 +317,9 @@ public abstract class PlayQueue implements Serializable {
|
||||||
queueIndex.incrementAndGet();
|
queueIndex.incrementAndGet();
|
||||||
}
|
}
|
||||||
|
|
||||||
streams.add(target, streams.remove(source));
|
PlayQueueItem playQueueItem = streams.remove(source);
|
||||||
|
playQueueItem.setAutoQueued(false);
|
||||||
|
streams.add(target, playQueueItem);
|
||||||
broadcast(new MoveEvent(source, target));
|
broadcast(new MoveEvent(source, target));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,10 @@ public class PlayQueueItem implements Serializable {
|
||||||
@NonNull final private String uploader;
|
@NonNull final private String uploader;
|
||||||
@NonNull final private StreamType streamType;
|
@NonNull final private StreamType streamType;
|
||||||
|
|
||||||
|
private boolean isAutoQueued;
|
||||||
|
|
||||||
private long recoveryPosition;
|
private long recoveryPosition;
|
||||||
private Throwable error;
|
private Throwable error;
|
||||||
|
|
||||||
PlayQueueItem(@NonNull final StreamInfo info) {
|
PlayQueueItem(@NonNull final StreamInfo info) {
|
||||||
this(info.getName(), info.getUrl(), info.getServiceId(), info.getDuration(),
|
this(info.getName(), info.getUrl(), info.getServiceId(), info.getDuration(),
|
||||||
info.getThumbnailUrl(), info.getUploaderName(), info.getStreamType());
|
info.getThumbnailUrl(), info.getUploaderName(), info.getStreamType());
|
||||||
|
@ -105,6 +106,14 @@ public class PlayQueueItem implements Serializable {
|
||||||
.doOnError(throwable -> error = throwable);
|
.doOnError(throwable -> error = throwable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isAutoQueued() {
|
||||||
|
return isAutoQueued;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAutoQueued(boolean autoQueued) {
|
||||||
|
isAutoQueued = autoQueued;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Item States, keep external access out
|
// Item States, keep external access out
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in New Issue