issue:1336 Fix for inserting new streams when auto queuing is enabled

This commit is contained in:
shivanju 2018-11-11 16:24:49 +05:30
parent 86f82c0e61
commit 47c3da131c
3 changed files with 26 additions and 5 deletions

View File

@ -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));
} }
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
@ -358,4 +358,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;
}
} }

View File

@ -233,7 +233,11 @@ public abstract class PlayQueue implements Serializable {
backup.addAll(itemList); backup.addAll(itemList);
Collections.shuffle(itemList); Collections.shuffle(itemList);
} }
streams.addAll(itemList); if (!streams.isEmpty() && streams.get(streams.size() - 1).isAutoQueued() && !itemList.get(0).isAutoQueued()) {
streams.addAll(streams.size() - 1, itemList);
} else {
streams.addAll(itemList);
}
broadcast(new AppendEvent(itemList.size())); broadcast(new AppendEvent(itemList.size()));
} }
@ -314,7 +318,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));
} }

View File

@ -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
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////