Merge pull request #13135 from dustdfg/player_loop_refactor
Misc player loop/stream refactors
This commit is contained in:
commit
ded310872b
3 changed files with 19 additions and 32 deletions
|
|
@ -49,12 +49,12 @@ import java.text.DecimalFormatSymbols;
|
||||||
import java.text.NumberFormat;
|
import java.text.NumberFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public final class PlayerHelper {
|
public final class PlayerHelper {
|
||||||
private static final FormattersProvider FORMATTERS_PROVIDER = new FormattersProvider();
|
private static final FormattersProvider FORMATTERS_PROVIDER = new FormattersProvider();
|
||||||
|
|
@ -87,11 +87,11 @@ public final class PlayerHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public static String getTimeString(final int milliSeconds) {
|
public static String getTimeString(final long milliSeconds) {
|
||||||
final int seconds = (milliSeconds % 60000) / 1000;
|
final long seconds = (milliSeconds % 60000) / 1000;
|
||||||
final int minutes = (milliSeconds % 3600000) / 60000;
|
final long minutes = (milliSeconds % 3600000) / 60000;
|
||||||
final int hours = (milliSeconds % 86400000) / 3600000;
|
final long hours = (milliSeconds % 86400000) / 3600000;
|
||||||
final int days = (milliSeconds % (86400000 * 7)) / 86400000;
|
final long days = (milliSeconds % (86400000 * 7)) / 86400000;
|
||||||
|
|
||||||
final Formatters formatters = FORMATTERS_PROVIDER.formatters();
|
final Formatters formatters = FORMATTERS_PROVIDER.formatters();
|
||||||
if (days > 0) {
|
if (days > 0) {
|
||||||
|
|
@ -174,10 +174,9 @@ public final class PlayerHelper {
|
||||||
@Nullable
|
@Nullable
|
||||||
public static PlayQueue autoQueueOf(@NonNull final StreamInfo info,
|
public static PlayQueue autoQueueOf(@NonNull final StreamInfo info,
|
||||||
@NonNull final List<PlayQueueItem> existingItems) {
|
@NonNull final List<PlayQueueItem> existingItems) {
|
||||||
final Set<String> urls = new HashSet<>(existingItems.size());
|
final Set<String> urls = existingItems.stream()
|
||||||
for (final PlayQueueItem item : existingItems) {
|
.map(PlayQueueItem::getUrl)
|
||||||
urls.add(item.getUrl());
|
.collect(Collectors.toUnmodifiableSet());
|
||||||
}
|
|
||||||
|
|
||||||
final List<InfoItem> relatedItems = info.getRelatedItems();
|
final List<InfoItem> relatedItems = info.getRelatedItems();
|
||||||
if (Utils.isNullOrEmpty(relatedItems)) {
|
if (Utils.isNullOrEmpty(relatedItems)) {
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@ import androidx.annotation.NonNull;
|
||||||
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
||||||
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
|
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public final class SinglePlayQueue extends PlayQueue {
|
public final class SinglePlayQueue extends PlayQueue {
|
||||||
public SinglePlayQueue(final StreamInfoItem item) {
|
public SinglePlayQueue(final StreamInfoItem item) {
|
||||||
|
|
@ -29,11 +29,7 @@ public final class SinglePlayQueue extends PlayQueue {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<PlayQueueItem> playQueueItemsOf(@NonNull final List<StreamInfoItem> items) {
|
private static List<PlayQueueItem> playQueueItemsOf(@NonNull final List<StreamInfoItem> items) {
|
||||||
final List<PlayQueueItem> playQueueItems = new ArrayList<>(items.size());
|
return items.stream().map(PlayQueueItem::new).collect(Collectors.toList());
|
||||||
for (final StreamInfoItem item : items) {
|
|
||||||
playQueueItems.add(new PlayQueueItem(item));
|
|
||||||
}
|
|
||||||
return playQueueItems;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,7 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutChangeListener {
|
public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutChangeListener {
|
||||||
private static final String TAG = MainPlayerUi.class.getSimpleName();
|
private static final String TAG = MainPlayerUi.class.getSimpleName();
|
||||||
|
|
@ -749,13 +750,13 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getNearestStreamSegmentPosition(final long playbackPosition) {
|
private int getNearestStreamSegmentPosition(final long playbackPosition) {
|
||||||
int nearestPosition = 0;
|
|
||||||
final List<StreamSegment> segments = player.getCurrentStreamInfo()
|
final List<StreamSegment> segments = player.getCurrentStreamInfo()
|
||||||
.map(StreamInfo::getStreamSegments)
|
.map(StreamInfo::getStreamSegments)
|
||||||
.orElse(Collections.emptyList());
|
.orElse(Collections.emptyList());
|
||||||
|
|
||||||
for (int i = 0; i < segments.size(); i++) {
|
int nearestPosition = 0;
|
||||||
if (segments.get(i).getStartTimeSeconds() * 1000L > playbackPosition) {
|
for (final var segment : segments) {
|
||||||
|
if (segment.getStartTimeSeconds() * 1000L > playbackPosition) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
nearestPosition++;
|
nearestPosition++;
|
||||||
|
|
@ -816,22 +817,13 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh
|
||||||
}
|
}
|
||||||
|
|
||||||
final int currentStream = playQueue.getIndex();
|
final int currentStream = playQueue.getIndex();
|
||||||
int before = 0;
|
|
||||||
int after = 0;
|
|
||||||
|
|
||||||
final List<PlayQueueItem> streams = playQueue.getStreams();
|
final List<PlayQueueItem> streams = playQueue.getStreams();
|
||||||
final int nStreams = streams.size();
|
|
||||||
|
|
||||||
for (int i = 0; i < nStreams; i++) {
|
final long before = streams.subList(0, currentStream).stream()
|
||||||
if (i < currentStream) {
|
.collect(Collectors.summingLong(PlayQueueItem::getDuration)) * 1000;
|
||||||
before += streams.get(i).getDuration();
|
|
||||||
} else {
|
|
||||||
after += streams.get(i).getDuration();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
before *= 1000;
|
final long after = streams.subList(currentStream, streams.size()).stream()
|
||||||
after *= 1000;
|
.collect(Collectors.summingLong(PlayQueueItem::getDuration)) * 1000;
|
||||||
|
|
||||||
binding.itemsListHeaderDuration.setText(
|
binding.itemsListHeaderDuration.setText(
|
||||||
String.format("%s/%s",
|
String.format("%s/%s",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue