2022-03-13 06:22:47 +01:00
|
|
|
package org.schabi.newpipe.player.mediaitem;
|
|
|
|
|
|
|
|
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
|
|
|
import org.schabi.newpipe.extractor.stream.StreamType;
|
|
|
|
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
|
2023-05-01 23:11:48 +02:00
|
|
|
import org.schabi.newpipe.util.PicassoHelper;
|
2022-03-13 06:22:47 +01:00
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Optional;
|
|
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.annotation.Nullable;
|
|
|
|
|
2022-03-17 01:47:29 +01:00
|
|
|
/**
|
|
|
|
* This {@link MediaItemTag} object is designed to contain metadata for a stream
|
|
|
|
* that has failed to load. It supplies metadata from an underlying
|
|
|
|
* {@link PlayQueueItem}, which is used by the internal players to resolve actual
|
|
|
|
* playback info.
|
|
|
|
*
|
|
|
|
* This {@link MediaItemTag} does not contain any {@link StreamInfo} that can be
|
|
|
|
* used to start playback and can be detected by checking {@link ExceptionTag#getErrors()}
|
|
|
|
* when in generic form.
|
|
|
|
**/
|
2022-03-13 06:22:47 +01:00
|
|
|
public final class ExceptionTag implements MediaItemTag {
|
|
|
|
@NonNull
|
|
|
|
private final PlayQueueItem item;
|
|
|
|
@NonNull
|
2022-03-27 01:17:52 +01:00
|
|
|
private final List<Exception> errors;
|
2022-03-13 06:22:47 +01:00
|
|
|
@Nullable
|
|
|
|
private final Object extras;
|
|
|
|
|
|
|
|
private ExceptionTag(@NonNull final PlayQueueItem item,
|
2022-03-27 01:17:52 +01:00
|
|
|
@NonNull final List<Exception> errors,
|
2022-03-13 06:22:47 +01:00
|
|
|
@Nullable final Object extras) {
|
|
|
|
this.item = item;
|
|
|
|
this.errors = errors;
|
|
|
|
this.extras = extras;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static ExceptionTag of(@NonNull final PlayQueueItem playQueueItem,
|
2022-03-27 01:17:52 +01:00
|
|
|
@NonNull final List<Exception> errors) {
|
2022-03-13 06:22:47 +01:00
|
|
|
return new ExceptionTag(playQueueItem, errors, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
@Override
|
2022-03-27 01:17:52 +01:00
|
|
|
public List<Exception> getErrors() {
|
2022-03-13 06:22:47 +01:00
|
|
|
return errors;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getServiceId() {
|
|
|
|
return item.getServiceId();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getTitle() {
|
|
|
|
return item.getTitle();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getUploaderName() {
|
|
|
|
return item.getUploader();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public long getDurationSeconds() {
|
|
|
|
return item.getDuration();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getStreamUrl() {
|
|
|
|
return item.getUrl();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getThumbnailUrl() {
|
2023-05-01 23:11:48 +02:00
|
|
|
return PicassoHelper.choosePreferredImage(item.getThumbnails());
|
2022-03-13 06:22:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getUploaderUrl() {
|
|
|
|
return item.getUploaderUrl();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public StreamType getStreamType() {
|
|
|
|
return item.getStreamType();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public <T> Optional<T> getMaybeExtras(@NonNull final Class<T> type) {
|
|
|
|
return Optional.ofNullable(extras).map(type::cast);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public <T> MediaItemTag withExtras(@NonNull final T extra) {
|
|
|
|
return new ExceptionTag(item, errors, extra);
|
|
|
|
}
|
|
|
|
}
|