2018-02-22 22:30:48 +01:00
|
|
|
package org.schabi.newpipe.player.mediasource;
|
|
|
|
|
2023-02-23 12:46:05 +01:00
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
|
2021-01-19 09:27:29 +01:00
|
|
|
import com.google.android.exoplayer2.MediaItem;
|
2018-02-22 22:30:48 +01:00
|
|
|
import com.google.android.exoplayer2.source.MediaSource;
|
2023-02-23 12:46:05 +01:00
|
|
|
import com.google.android.exoplayer2.source.WrappingMediaSource;
|
2018-02-22 22:30:48 +01:00
|
|
|
|
2022-03-13 06:22:47 +01:00
|
|
|
import org.schabi.newpipe.player.mediaitem.MediaItemTag;
|
2018-04-21 23:10:01 +02:00
|
|
|
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
|
2018-02-22 22:30:48 +01:00
|
|
|
|
2023-02-23 12:46:05 +01:00
|
|
|
public class LoadedMediaSource extends WrappingMediaSource implements ManagedMediaSource {
|
2018-02-27 04:57:59 +01:00
|
|
|
private final PlayQueueItem stream;
|
2022-03-13 06:22:47 +01:00
|
|
|
private final MediaItem mediaItem;
|
2018-02-22 22:30:48 +01:00
|
|
|
private final long expireTimestamp;
|
|
|
|
|
2022-03-18 03:56:22 +01:00
|
|
|
/**
|
2023-02-23 12:46:05 +01:00
|
|
|
* Uses a {@link WrappingMediaSource} to wrap one child {@link MediaSource}s
|
2022-03-18 03:56:22 +01:00
|
|
|
* containing actual media. This wrapper {@link LoadedMediaSource} holds the expiration
|
|
|
|
* timestamp as a {@link ManagedMediaSource} to allow explicit playlist management under
|
|
|
|
* {@link ManagedMediaSourcePlaylist}.
|
|
|
|
*
|
|
|
|
* @param source The child media source with actual media.
|
|
|
|
* @param tag Metadata for the child media source.
|
|
|
|
* @param stream The queue item associated with the media source.
|
|
|
|
* @param expireTimestamp The timestamp when the media source expires and might not be
|
|
|
|
* available for playback.
|
|
|
|
*/
|
2022-03-13 06:22:47 +01:00
|
|
|
public LoadedMediaSource(@NonNull final MediaSource source,
|
|
|
|
@NonNull final MediaItemTag tag,
|
|
|
|
@NonNull final PlayQueueItem stream,
|
2018-02-27 04:57:59 +01:00
|
|
|
final long expireTimestamp) {
|
2023-02-23 12:46:05 +01:00
|
|
|
super(source);
|
2018-02-27 04:57:59 +01:00
|
|
|
this.stream = stream;
|
2018-02-22 22:30:48 +01:00
|
|
|
this.expireTimestamp = expireTimestamp;
|
2022-03-13 06:22:47 +01:00
|
|
|
|
|
|
|
this.mediaItem = tag.withExtras(this).asMediaItem();
|
2018-02-22 22:30:48 +01:00
|
|
|
}
|
|
|
|
|
2018-02-27 04:57:59 +01:00
|
|
|
public PlayQueueItem getStream() {
|
|
|
|
return stream;
|
|
|
|
}
|
|
|
|
|
|
|
|
private boolean isExpired() {
|
|
|
|
return System.currentTimeMillis() >= expireTimestamp;
|
|
|
|
}
|
|
|
|
|
2022-03-13 06:22:47 +01:00
|
|
|
@NonNull
|
2021-01-19 09:27:29 +01:00
|
|
|
@Override
|
|
|
|
public MediaItem getMediaItem() {
|
2022-03-13 06:22:47 +01:00
|
|
|
return mediaItem;
|
2021-01-19 09:27:29 +01:00
|
|
|
}
|
|
|
|
|
2018-02-22 22:30:48 +01:00
|
|
|
@Override
|
2020-03-31 19:20:15 +02:00
|
|
|
public boolean shouldBeReplacedWith(@NonNull final PlayQueueItem newIdentity,
|
2018-03-18 00:04:02 +01:00
|
|
|
final boolean isInterruptable) {
|
|
|
|
return newIdentity != stream || (isInterruptable && isExpired());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2020-03-31 19:20:15 +02:00
|
|
|
public boolean isStreamEqual(@NonNull final PlayQueueItem otherStream) {
|
|
|
|
return this.stream == otherStream;
|
2018-02-22 22:30:48 +01:00
|
|
|
}
|
|
|
|
}
|