mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2024-11-30 04:26:00 +01:00
fix: small codestyle fixes
This commit is contained in:
parent
2edc223e77
commit
b567d428ad
@ -103,7 +103,7 @@ public class DownloadDialog extends DialogFragment
|
|||||||
@State
|
@State
|
||||||
AudioTracksWrapper wrappedAudioTracks;
|
AudioTracksWrapper wrappedAudioTracks;
|
||||||
@State
|
@State
|
||||||
int selectedAudioStreamIndex;
|
int selectedAudioTrackIndex;
|
||||||
@State
|
@State
|
||||||
int selectedVideoIndex; // set in the constructor
|
int selectedVideoIndex; // set in the constructor
|
||||||
@State
|
@State
|
||||||
@ -173,7 +173,7 @@ public class DownloadDialog extends DialogFragment
|
|||||||
final List<List<AudioStream>> groupedAudioStreams =
|
final List<List<AudioStream>> groupedAudioStreams =
|
||||||
ListHelper.getGroupedAudioStreams(context, audioStreams);
|
ListHelper.getGroupedAudioStreams(context, audioStreams);
|
||||||
this.wrappedAudioTracks = new AudioTracksWrapper(groupedAudioStreams, context);
|
this.wrappedAudioTracks = new AudioTracksWrapper(groupedAudioStreams, context);
|
||||||
this.selectedAudioStreamIndex =
|
this.selectedAudioTrackIndex =
|
||||||
ListHelper.getDefaultAudioTrackGroup(context, groupedAudioStreams);
|
ListHelper.getDefaultAudioTrackGroup(context, groupedAudioStreams);
|
||||||
|
|
||||||
// TODO: Adapt this code when the downloader support other types of stream deliveries
|
// TODO: Adapt this code when the downloader support other types of stream deliveries
|
||||||
@ -433,7 +433,7 @@ public class DownloadDialog extends DialogFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
dialogBinding.audioTrackSpinner.setAdapter(audioTrackAdapter);
|
dialogBinding.audioTrackSpinner.setAdapter(audioTrackAdapter);
|
||||||
dialogBinding.audioTrackSpinner.setSelection(selectedAudioStreamIndex);
|
dialogBinding.audioTrackSpinner.setSelection(selectedAudioTrackIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupAudioSpinner() {
|
private void setupAudioSpinner() {
|
||||||
@ -619,8 +619,8 @@ public class DownloadDialog extends DialogFragment
|
|||||||
onItemSelectedSetFileName();
|
onItemSelectedSetFileName();
|
||||||
break;
|
break;
|
||||||
case R.id.audio_track_spinner:
|
case R.id.audio_track_spinner:
|
||||||
final boolean trackChanged = selectedAudioStreamIndex != position;
|
final boolean trackChanged = selectedAudioTrackIndex != position;
|
||||||
selectedAudioStreamIndex = position;
|
selectedAudioTrackIndex = position;
|
||||||
if (trackChanged) {
|
if (trackChanged) {
|
||||||
updateSecondaryStreams();
|
updateSecondaryStreams();
|
||||||
fetchStreamsSize();
|
fetchStreamsSize();
|
||||||
@ -726,10 +726,10 @@ public class DownloadDialog extends DialogFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
private StreamSizeWrapper<AudioStream> getWrappedAudioStreams() {
|
private StreamSizeWrapper<AudioStream> getWrappedAudioStreams() {
|
||||||
if (selectedAudioStreamIndex < 0 || selectedAudioStreamIndex > wrappedAudioTracks.size()) {
|
if (selectedAudioTrackIndex < 0 || selectedAudioTrackIndex > wrappedAudioTracks.size()) {
|
||||||
return StreamSizeWrapper.empty();
|
return StreamSizeWrapper.empty();
|
||||||
}
|
}
|
||||||
return wrappedAudioTracks.getTracksList().get(selectedAudioStreamIndex);
|
return wrappedAudioTracks.getTracksList().get(selectedAudioTrackIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getSubtitleIndexBy(@NonNull final List<SubtitlesStream> streams) {
|
private int getSubtitleIndexBy(@NonNull final List<SubtitlesStream> streams) {
|
||||||
|
@ -667,11 +667,8 @@ public final class PlayQueueActivity extends AppCompatActivity
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
player.saveStreamProgressState();
|
|
||||||
final String newAudioTrack = availableStreams.get(itemId).getAudioTrackId();
|
final String newAudioTrack = availableStreams.get(itemId).getAudioTrackId();
|
||||||
player.setRecovery();
|
|
||||||
player.setAudioTrack(newAudioTrack);
|
player.setAudioTrack(newAudioTrack);
|
||||||
player.reloadPlayQueueManager();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -180,13 +180,18 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
// play queue might be null e.g. while player is starting
|
// play queue might be null e.g. while player is starting
|
||||||
@Nullable private PlayQueue playQueue;
|
@Nullable
|
||||||
|
private PlayQueue playQueue;
|
||||||
|
|
||||||
@Nullable private MediaSourceManager playQueueManager;
|
@Nullable
|
||||||
|
private MediaSourceManager playQueueManager;
|
||||||
|
|
||||||
@Nullable private PlayQueueItem currentItem;
|
@Nullable
|
||||||
@Nullable private MediaItemTag currentMetadata;
|
private PlayQueueItem currentItem;
|
||||||
@Nullable private Bitmap currentThumbnail;
|
@Nullable
|
||||||
|
private MediaItemTag currentMetadata;
|
||||||
|
@Nullable
|
||||||
|
private Bitmap currentThumbnail;
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Player
|
// Player
|
||||||
@ -195,12 +200,17 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
private ExoPlayer simpleExoPlayer;
|
private ExoPlayer simpleExoPlayer;
|
||||||
private AudioReactor audioReactor;
|
private AudioReactor audioReactor;
|
||||||
|
|
||||||
@NonNull private final DefaultTrackSelector trackSelector;
|
@NonNull
|
||||||
@NonNull private final LoadController loadController;
|
private final DefaultTrackSelector trackSelector;
|
||||||
@NonNull private final DefaultRenderersFactory renderFactory;
|
@NonNull
|
||||||
|
private final LoadController loadController;
|
||||||
|
@NonNull
|
||||||
|
private final DefaultRenderersFactory renderFactory;
|
||||||
|
|
||||||
@NonNull private final VideoPlaybackResolver videoResolver;
|
@NonNull
|
||||||
@NonNull private final AudioPlaybackResolver audioResolver;
|
private final VideoPlaybackResolver videoResolver;
|
||||||
|
@NonNull
|
||||||
|
private final AudioPlaybackResolver audioResolver;
|
||||||
|
|
||||||
private final PlayerService service; //TODO try to remove and replace everything with context
|
private final PlayerService service; //TODO try to remove and replace everything with context
|
||||||
|
|
||||||
@ -225,24 +235,32 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
|
|
||||||
private BroadcastReceiver broadcastReceiver;
|
private BroadcastReceiver broadcastReceiver;
|
||||||
private IntentFilter intentFilter;
|
private IntentFilter intentFilter;
|
||||||
@Nullable private PlayerServiceEventListener fragmentListener = null;
|
@Nullable
|
||||||
@Nullable private PlayerEventListener activityListener = null;
|
private PlayerServiceEventListener fragmentListener = null;
|
||||||
|
@Nullable
|
||||||
|
private PlayerEventListener activityListener = null;
|
||||||
|
|
||||||
@NonNull private final SerialDisposable progressUpdateDisposable = new SerialDisposable();
|
@NonNull
|
||||||
@NonNull private final CompositeDisposable databaseUpdateDisposable = new CompositeDisposable();
|
private final SerialDisposable progressUpdateDisposable = new SerialDisposable();
|
||||||
|
@NonNull
|
||||||
|
private final CompositeDisposable databaseUpdateDisposable = new CompositeDisposable();
|
||||||
|
|
||||||
// This is the only listener we need for thumbnail loading, since there is always at most only
|
// This is the only listener we need for thumbnail loading, since there is always at most only
|
||||||
// one thumbnail being loaded at a time. This field is also here to maintain a strong reference,
|
// one thumbnail being loaded at a time. This field is also here to maintain a strong reference,
|
||||||
// which would otherwise be garbage collected since Picasso holds weak references to targets.
|
// which would otherwise be garbage collected since Picasso holds weak references to targets.
|
||||||
@NonNull private final Target currentThumbnailTarget;
|
@NonNull
|
||||||
|
private final Target currentThumbnailTarget;
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Utils
|
// Utils
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
@NonNull private final Context context;
|
@NonNull
|
||||||
@NonNull private final SharedPreferences prefs;
|
private final Context context;
|
||||||
@NonNull private final HistoryRecordManager recordManager;
|
@NonNull
|
||||||
|
private final SharedPreferences prefs;
|
||||||
|
@NonNull
|
||||||
|
private final HistoryRecordManager recordManager;
|
||||||
|
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
@ -334,7 +352,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
isAudioOnly = audioPlayerSelected();
|
isAudioOnly = audioPlayerSelected();
|
||||||
|
|
||||||
if (intent.hasExtra(PLAYBACK_QUALITY)) {
|
if (intent.hasExtra(PLAYBACK_QUALITY)) {
|
||||||
setPlaybackQuality(intent.getStringExtra(PLAYBACK_QUALITY));
|
videoResolver.setPlaybackQuality(intent.getStringExtra(PLAYBACK_QUALITY));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resolve enqueue intents
|
// Resolve enqueue intents
|
||||||
@ -342,7 +360,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
playQueue.append(newQueue.getStreams());
|
playQueue.append(newQueue.getStreams());
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Resolve enqueue next intents
|
// Resolve enqueue next intents
|
||||||
} else if (intent.getBooleanExtra(ENQUEUE_NEXT, false) && playQueue != null) {
|
} else if (intent.getBooleanExtra(ENQUEUE_NEXT, false) && playQueue != null) {
|
||||||
final int currentIndex = playQueue.getIndex();
|
final int currentIndex = playQueue.getIndex();
|
||||||
playQueue.append(newQueue.getStreams());
|
playQueue.append(newQueue.getStreams());
|
||||||
@ -914,7 +932,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
|
|
||||||
private Disposable getProgressUpdateDisposable() {
|
private Disposable getProgressUpdateDisposable() {
|
||||||
return Observable.interval(PROGRESS_LOOP_INTERVAL_MILLIS, MILLISECONDS,
|
return Observable.interval(PROGRESS_LOOP_INTERVAL_MILLIS, MILLISECONDS,
|
||||||
AndroidSchedulers.mainThread())
|
AndroidSchedulers.mainThread())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe(ignored -> triggerProgressUpdate(),
|
.subscribe(ignored -> triggerProgressUpdate(),
|
||||||
error -> Log.e(TAG, "Progress update failure: ", error));
|
error -> Log.e(TAG, "Progress update failure: ", error));
|
||||||
@ -923,7 +941,6 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Playback states
|
// Playback states
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
@ -1247,7 +1264,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
.flatMap(MediaItemTag::getMaybeStreamInfo).orElse(null);
|
.flatMap(MediaItemTag::getMaybeStreamInfo).orElse(null);
|
||||||
final MediaItemTag.AudioTrack previousAudioTrack =
|
final MediaItemTag.AudioTrack previousAudioTrack =
|
||||||
Optional.ofNullable(currentMetadata)
|
Optional.ofNullable(currentMetadata)
|
||||||
.flatMap(MediaItemTag::getMaybeAudioTrack).orElse(null);
|
.flatMap(MediaItemTag::getMaybeAudioTrack).orElse(null);
|
||||||
currentMetadata = tag;
|
currentMetadata = tag;
|
||||||
|
|
||||||
if (!currentMetadata.getErrors().isEmpty()) {
|
if (!currentMetadata.getErrors().isEmpty()) {
|
||||||
@ -1270,9 +1287,9 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
updateMetadataWith(info);
|
updateMetadataWith(info);
|
||||||
} else if (previousAudioTrack == null
|
} else if (previousAudioTrack == null
|
||||||
|| tag.getMaybeAudioTrack()
|
|| tag.getMaybeAudioTrack()
|
||||||
.map(t -> t.getSelectedAudioStreamIndex()
|
.map(t -> t.getSelectedAudioStreamIndex()
|
||||||
!= previousAudioTrack.getSelectedAudioStreamIndex())
|
!= previousAudioTrack.getSelectedAudioStreamIndex())
|
||||||
.orElse(false)) {
|
.orElse(false)) {
|
||||||
notifyAudioTrackUpdateToListeners();
|
notifyAudioTrackUpdateToListeners();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -1361,6 +1378,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
// Errors
|
// Errors
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
//region Errors
|
//region Errors
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process exceptions produced by {@link com.google.android.exoplayer2.ExoPlayer ExoPlayer}.
|
* Process exceptions produced by {@link com.google.android.exoplayer2.ExoPlayer ExoPlayer}.
|
||||||
* <p>There are multiple types of errors:</p>
|
* <p>There are multiple types of errors:</p>
|
||||||
@ -1387,8 +1405,9 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
* For any error above that is <b>not</b> explicitly <b>catchable</b>, the player will
|
* For any error above that is <b>not</b> explicitly <b>catchable</b>, the player will
|
||||||
* create a notification so users are aware.
|
* create a notification so users are aware.
|
||||||
* </ul>
|
* </ul>
|
||||||
|
*
|
||||||
* @see com.google.android.exoplayer2.Player.Listener#onPlayerError(PlaybackException)
|
* @see com.google.android.exoplayer2.Player.Listener#onPlayerError(PlaybackException)
|
||||||
* */
|
*/
|
||||||
// Any error code not explicitly covered here are either unrelated to NewPipe use case
|
// Any error code not explicitly covered here are either unrelated to NewPipe use case
|
||||||
// (e.g. DRM) or not recoverable (e.g. Decoder error). In both cases, the player should
|
// (e.g. DRM) or not recoverable (e.g. Decoder error). In both cases, the player should
|
||||||
// shutdown.
|
// shutdown.
|
||||||
@ -2141,7 +2160,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
// because the stream source will be probably the same as the current played
|
// because the stream source will be probably the same as the current played
|
||||||
if (sourceType == SourceType.VIDEO_WITH_SEPARATED_AUDIO
|
if (sourceType == SourceType.VIDEO_WITH_SEPARATED_AUDIO
|
||||||
|| (sourceType == SourceType.VIDEO_WITH_AUDIO_OR_AUDIO_ONLY
|
|| (sourceType == SourceType.VIDEO_WITH_AUDIO_OR_AUDIO_ONLY
|
||||||
&& isNullOrEmpty(streamInfo.getAudioStreams()))) {
|
&& isNullOrEmpty(streamInfo.getAudioStreams()))) {
|
||||||
// It's not needed to reload the play queue manager only if the content's stream type
|
// It's not needed to reload the play queue manager only if the content's stream type
|
||||||
// is a video stream, a live stream or an ended live stream
|
// is a video stream, a live stream or an ended live stream
|
||||||
return !StreamTypeUtil.isVideo(streamType);
|
return !StreamTypeUtil.isVideo(streamType);
|
||||||
@ -2203,12 +2222,18 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setPlaybackQuality(@Nullable final String quality) {
|
public void setPlaybackQuality(@Nullable final String quality) {
|
||||||
|
saveStreamProgressState();
|
||||||
|
setRecovery();
|
||||||
videoResolver.setPlaybackQuality(quality);
|
videoResolver.setPlaybackQuality(quality);
|
||||||
|
reloadPlayQueueManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAudioTrack(@Nullable final String audioTrackId) {
|
public void setAudioTrack(@Nullable final String audioTrackId) {
|
||||||
|
saveStreamProgressState();
|
||||||
|
setRecovery();
|
||||||
videoResolver.setAudioTrack(audioTrackId);
|
videoResolver.setAudioTrack(audioTrackId);
|
||||||
audioResolver.setAudioTrack(audioTrackId);
|
audioResolver.setAudioTrack(audioTrackId);
|
||||||
|
reloadPlayQueueManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2286,7 +2311,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the video renderer index of the current playing stream.
|
* Get the video renderer index of the current playing stream.
|
||||||
*
|
* <p>
|
||||||
* This method returns the video renderer index of the current
|
* This method returns the video renderer index of the current
|
||||||
* {@link MappingTrackSelector.MappedTrackInfo} or {@link #RENDERER_UNAVAILABLE} if the current
|
* {@link MappingTrackSelector.MappedTrackInfo} or {@link #RENDERER_UNAVAILABLE} if the current
|
||||||
* {@link MappingTrackSelector.MappedTrackInfo} is null or if there is no video renderer index.
|
* {@link MappingTrackSelector.MappedTrackInfo} is null or if there is no video renderer index.
|
||||||
|
@ -38,6 +38,13 @@ public class AudioPlaybackResolver implements PlaybackResolver {
|
|||||||
this.dataSource = dataSource;
|
this.dataSource = dataSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a media source providing audio. If a service has no separate {@link AudioStream}s we
|
||||||
|
* use a video stream as audio source to support audio background playback.
|
||||||
|
*
|
||||||
|
* @param info of the stream
|
||||||
|
* @return the audio source to use or null if none could be found
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public MediaSource resolve(@NonNull final StreamInfo info) {
|
public MediaSource resolve(@NonNull final StreamInfo info) {
|
||||||
|
@ -110,7 +110,8 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa
|
|||||||
|
|
||||||
protected PlayerBinding binding;
|
protected PlayerBinding binding;
|
||||||
private final Handler controlsVisibilityHandler = new Handler(Looper.getMainLooper());
|
private final Handler controlsVisibilityHandler = new Handler(Looper.getMainLooper());
|
||||||
@Nullable private SurfaceHolderCallback surfaceHolderCallback;
|
@Nullable
|
||||||
|
private SurfaceHolderCallback surfaceHolderCallback;
|
||||||
boolean surfaceIsSetup = false;
|
boolean surfaceIsSetup = false;
|
||||||
|
|
||||||
|
|
||||||
@ -533,6 +534,7 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the current duration into the corresponding elements.
|
* Sets the current duration into the corresponding elements.
|
||||||
|
*
|
||||||
* @param currentProgress the current progress, in milliseconds
|
* @param currentProgress the current progress, in milliseconds
|
||||||
*/
|
*/
|
||||||
private void updatePlayBackElementsCurrentDuration(final int currentProgress) {
|
private void updatePlayBackElementsCurrentDuration(final int currentProgress) {
|
||||||
@ -545,6 +547,7 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the video duration time into all control components (e.g. seekbar).
|
* Sets the video duration time into all control components (e.g. seekbar).
|
||||||
|
*
|
||||||
* @param duration the video duration, in milliseconds
|
* @param duration the video duration, in milliseconds
|
||||||
*/
|
*/
|
||||||
private void setVideoDurationToControls(final int duration) {
|
private void setVideoDurationToControls(final int duration) {
|
||||||
@ -1261,11 +1264,8 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
player.saveStreamProgressState();
|
|
||||||
final String newResolution = availableStreams.get(menuItemIndex).getResolution();
|
final String newResolution = availableStreams.get(menuItemIndex).getResolution();
|
||||||
player.setRecovery();
|
|
||||||
player.setPlaybackQuality(newResolution);
|
player.setPlaybackQuality(newResolution);
|
||||||
player.reloadPlayQueueManager();
|
|
||||||
|
|
||||||
binding.qualityTextView.setText(menuItem.getTitle());
|
binding.qualityTextView.setText(menuItem.getTitle());
|
||||||
}
|
}
|
||||||
@ -1285,11 +1285,8 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
player.saveStreamProgressState();
|
|
||||||
final String newAudioTrack = availableStreams.get(menuItemIndex).getAudioTrackId();
|
final String newAudioTrack = availableStreams.get(menuItemIndex).getAudioTrackId();
|
||||||
player.setRecovery();
|
|
||||||
player.setAudioTrack(newAudioTrack);
|
player.setAudioTrack(newAudioTrack);
|
||||||
player.reloadPlayQueueManager();
|
|
||||||
|
|
||||||
binding.audioTrackTextView.setText(menuItem.getTitle());
|
binding.audioTrackTextView.setText(menuItem.getTitle());
|
||||||
}
|
}
|
||||||
|
@ -715,9 +715,9 @@ public final class ListHelper {
|
|||||||
/**
|
/**
|
||||||
* Get a {@link Comparator} to compare {@link AudioStream}s by their tracks.
|
* Get a {@link Comparator} to compare {@link AudioStream}s by their tracks.
|
||||||
*
|
*
|
||||||
* <p>In this order:</p>
|
* <p>Tracks will be compared this order:</p>
|
||||||
* <ol>
|
* <ol>
|
||||||
* <li>If {@code preferOriginalAudio}: is original audio</li>
|
* <li>If {@code preferOriginalAudio}: use original audio</li>
|
||||||
* <li>Language matches {@code preferredLanguage}</li>
|
* <li>Language matches {@code preferredLanguage}</li>
|
||||||
* <li>
|
* <li>
|
||||||
* Track type ranks highest in this order:
|
* Track type ranks highest in this order:
|
||||||
@ -752,9 +752,9 @@ public final class ListHelper {
|
|||||||
/**
|
/**
|
||||||
* Get a {@link Comparator} to compare {@link AudioStream}s by their tracks.
|
* Get a {@link Comparator} to compare {@link AudioStream}s by their tracks.
|
||||||
*
|
*
|
||||||
* <p>In this order:</p>
|
* <p>Tracks will be compared this order:</p>
|
||||||
* <ol>
|
* <ol>
|
||||||
* <li>If {@code preferOriginalAudio}: is original audio</li>
|
* <li>If {@code preferOriginalAudio}: use original audio</li>
|
||||||
* <li>Language matches {@code preferredLanguage}</li>
|
* <li>Language matches {@code preferredLanguage}</li>
|
||||||
* <li>
|
* <li>
|
||||||
* Track type ranks highest in this order:
|
* Track type ranks highest in this order:
|
||||||
|
@ -224,6 +224,8 @@ public class StreamItemAdapter<T extends Stream, U extends Stream> extends BaseA
|
|||||||
public static class StreamSizeWrapper<T extends Stream> implements Serializable {
|
public static class StreamSizeWrapper<T extends Stream> implements Serializable {
|
||||||
private static final StreamSizeWrapper<Stream> EMPTY =
|
private static final StreamSizeWrapper<Stream> EMPTY =
|
||||||
new StreamSizeWrapper<>(Collections.emptyList(), null);
|
new StreamSizeWrapper<>(Collections.emptyList(), null);
|
||||||
|
private static final int SIZE_UNSET = -2;
|
||||||
|
|
||||||
private final List<T> streamsList;
|
private final List<T> streamsList;
|
||||||
private final long[] streamSizes;
|
private final long[] streamSizes;
|
||||||
private final String unknownSize;
|
private final String unknownSize;
|
||||||
@ -251,7 +253,7 @@ public class StreamItemAdapter<T extends Stream, U extends Stream> extends BaseA
|
|||||||
final Callable<Boolean> fetchAndSet = () -> {
|
final Callable<Boolean> fetchAndSet = () -> {
|
||||||
boolean hasChanged = false;
|
boolean hasChanged = false;
|
||||||
for (final X stream : streamsWrapper.getStreamsList()) {
|
for (final X stream : streamsWrapper.getStreamsList()) {
|
||||||
if (streamsWrapper.getSizeInBytes(stream) > -2) {
|
if (streamsWrapper.getSizeInBytes(stream) > SIZE_UNSET) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,7 +272,7 @@ public class StreamItemAdapter<T extends Stream, U extends Stream> extends BaseA
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void resetSizes() {
|
public void resetSizes() {
|
||||||
Arrays.fill(streamSizes, -2);
|
Arrays.fill(streamSizes, SIZE_UNSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <X extends Stream> StreamSizeWrapper<X> empty() {
|
public static <X extends Stream> StreamSizeWrapper<X> empty() {
|
||||||
|
Loading…
Reference in New Issue
Block a user