Convert MissionRecoveryInfo to Kotlin and use the Parcelize annotation.
This commit is contained in:
parent
ec1e746a22
commit
897c754dd4
4 changed files with 83 additions and 127 deletions
|
@ -160,11 +160,11 @@ public class DownloadInitializer extends Thread {
|
|||
MissionRecoveryInfo recovery = mMission.recoveryInfo[mMission.current];
|
||||
|
||||
if (!TextUtils.isEmpty(entityTag)) {
|
||||
recovery.validateCondition = entityTag;
|
||||
recovery.setValidateCondition(entityTag);
|
||||
} else if (!TextUtils.isEmpty(lastModified)) {
|
||||
recovery.validateCondition = lastModified;// Note: this is less precise
|
||||
recovery.setValidateCondition(lastModified);// Note: this is less precise
|
||||
} else {
|
||||
recovery.validateCondition = null;
|
||||
recovery.setValidateCondition(null);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -129,10 +129,10 @@ public class DownloadMissionRecover extends Thread {
|
|||
|
||||
String url = null;
|
||||
|
||||
switch (mRecovery.kind) {
|
||||
switch (mRecovery.getKind()) {
|
||||
case 'a':
|
||||
for (AudioStream audio : mExtractor.getAudioStreams()) {
|
||||
if (audio.average_bitrate == mRecovery.desiredBitrate && audio.getFormat() == mRecovery.format) {
|
||||
if (audio.average_bitrate == mRecovery.getDesiredBitrate() && audio.getFormat() == mRecovery.getFormat()) {
|
||||
url = audio.getUrl();
|
||||
break;
|
||||
}
|
||||
|
@ -140,21 +140,21 @@ public class DownloadMissionRecover extends Thread {
|
|||
break;
|
||||
case 'v':
|
||||
List<VideoStream> videoStreams;
|
||||
if (mRecovery.desired2)
|
||||
if (mRecovery.isDesired2())
|
||||
videoStreams = mExtractor.getVideoOnlyStreams();
|
||||
else
|
||||
videoStreams = mExtractor.getVideoStreams();
|
||||
for (VideoStream video : videoStreams) {
|
||||
if (video.resolution.equals(mRecovery.desired) && video.getFormat() == mRecovery.format) {
|
||||
if (video.resolution.equals(mRecovery.getDesired()) && video.getFormat() == mRecovery.getFormat()) {
|
||||
url = video.getUrl();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 's':
|
||||
for (SubtitlesStream subtitles : mExtractor.getSubtitles(mRecovery.format)) {
|
||||
for (SubtitlesStream subtitles : mExtractor.getSubtitles(mRecovery.getFormat())) {
|
||||
String tag = subtitles.getLanguageTag();
|
||||
if (tag.equals(mRecovery.desired) && subtitles.isAutoGenerated() == mRecovery.desired2) {
|
||||
if (tag.equals(mRecovery.getDesired()) && subtitles.isAutoGenerated() == mRecovery.isDesired2()) {
|
||||
url = subtitles.getUrl();
|
||||
break;
|
||||
}
|
||||
|
@ -168,11 +168,11 @@ public class DownloadMissionRecover extends Thread {
|
|||
}
|
||||
|
||||
private void resolve(String url) throws IOException, HttpError {
|
||||
if (mRecovery.validateCondition == null) {
|
||||
if (mRecovery.getValidateCondition() == null) {
|
||||
Log.w(TAG, "validation condition not defined, the resource can be stale");
|
||||
}
|
||||
|
||||
if (mMission.unknownLength || mRecovery.validateCondition == null) {
|
||||
if (mMission.unknownLength || mRecovery.getValidateCondition() == null) {
|
||||
recover(url, false);
|
||||
return;
|
||||
}
|
||||
|
@ -182,7 +182,7 @@ public class DownloadMissionRecover extends Thread {
|
|||
/////////////////////
|
||||
try {
|
||||
mConn = mMission.openConnection(url, true, mMission.length - 10, mMission.length);
|
||||
mConn.setRequestProperty("If-Range", mRecovery.validateCondition);
|
||||
mConn.setRequestProperty("If-Range", mRecovery.getValidateCondition());
|
||||
mMission.establishConnection(mID, mConn);
|
||||
|
||||
int code = mConn.getResponseCode();
|
||||
|
|
|
@ -1,115 +0,0 @@
|
|||
package us.shandian.giga.get;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.schabi.newpipe.extractor.MediaFormat;
|
||||
import org.schabi.newpipe.extractor.stream.AudioStream;
|
||||
import org.schabi.newpipe.extractor.stream.Stream;
|
||||
import org.schabi.newpipe.extractor.stream.SubtitlesStream;
|
||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class MissionRecoveryInfo implements Serializable, Parcelable {
|
||||
private static final long serialVersionUID = 0L;
|
||||
|
||||
MediaFormat format;
|
||||
String desired;
|
||||
boolean desired2;
|
||||
int desiredBitrate;
|
||||
byte kind;
|
||||
String validateCondition = null;
|
||||
|
||||
public MissionRecoveryInfo(@NonNull Stream stream) {
|
||||
if (stream instanceof AudioStream) {
|
||||
desiredBitrate = ((AudioStream) stream).average_bitrate;
|
||||
desired2 = false;
|
||||
kind = 'a';
|
||||
} else if (stream instanceof VideoStream) {
|
||||
desired = ((VideoStream) stream).getResolution();
|
||||
desired2 = ((VideoStream) stream).isVideoOnly();
|
||||
kind = 'v';
|
||||
} else if (stream instanceof SubtitlesStream) {
|
||||
desired = ((SubtitlesStream) stream).getLanguageTag();
|
||||
desired2 = ((SubtitlesStream) stream).isAutoGenerated();
|
||||
kind = 's';
|
||||
} else {
|
||||
throw new RuntimeException("Unknown stream kind");
|
||||
}
|
||||
|
||||
format = stream.getFormat();
|
||||
if (format == null) throw new NullPointerException("Stream format cannot be null");
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
String info;
|
||||
StringBuilder str = new StringBuilder();
|
||||
str.append("{type=");
|
||||
switch (kind) {
|
||||
case 'a':
|
||||
str.append("audio");
|
||||
info = "bitrate=" + desiredBitrate;
|
||||
break;
|
||||
case 'v':
|
||||
str.append("video");
|
||||
info = "quality=" + desired + " videoOnly=" + desired2;
|
||||
break;
|
||||
case 's':
|
||||
str.append("subtitles");
|
||||
info = "language=" + desired + " autoGenerated=" + desired2;
|
||||
break;
|
||||
default:
|
||||
info = "";
|
||||
str.append("other");
|
||||
}
|
||||
|
||||
str.append(" format=")
|
||||
.append(format.getName())
|
||||
.append(' ')
|
||||
.append(info)
|
||||
.append('}');
|
||||
|
||||
return str.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel parcel, int flags) {
|
||||
parcel.writeInt(this.format.ordinal());
|
||||
parcel.writeString(this.desired);
|
||||
parcel.writeInt(this.desired2 ? 0x01 : 0x00);
|
||||
parcel.writeInt(this.desiredBitrate);
|
||||
parcel.writeByte(this.kind);
|
||||
parcel.writeString(this.validateCondition);
|
||||
}
|
||||
|
||||
private MissionRecoveryInfo(Parcel parcel) {
|
||||
this.format = MediaFormat.values()[parcel.readInt()];
|
||||
this.desired = parcel.readString();
|
||||
this.desired2 = parcel.readInt() != 0x00;
|
||||
this.desiredBitrate = parcel.readInt();
|
||||
this.kind = parcel.readByte();
|
||||
this.validateCondition = parcel.readString();
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<MissionRecoveryInfo> CREATOR = new Parcelable.Creator<MissionRecoveryInfo>() {
|
||||
@Override
|
||||
public MissionRecoveryInfo createFromParcel(Parcel source) {
|
||||
return new MissionRecoveryInfo(source);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MissionRecoveryInfo[] newArray(int size) {
|
||||
return new MissionRecoveryInfo[size];
|
||||
}
|
||||
};
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
package us.shandian.giga.get
|
||||
|
||||
import android.os.Parcelable
|
||||
import java.io.Serializable
|
||||
import kotlinx.android.parcel.Parcelize
|
||||
import org.schabi.newpipe.extractor.MediaFormat
|
||||
import org.schabi.newpipe.extractor.stream.AudioStream
|
||||
import org.schabi.newpipe.extractor.stream.Stream
|
||||
import org.schabi.newpipe.extractor.stream.SubtitlesStream
|
||||
import org.schabi.newpipe.extractor.stream.VideoStream
|
||||
|
||||
@Parcelize
|
||||
class MissionRecoveryInfo(
|
||||
var format: MediaFormat,
|
||||
var desired: String? = null,
|
||||
var isDesired2: Boolean = false,
|
||||
var desiredBitrate: Int = 0,
|
||||
var kind: Char = Char.MIN_VALUE,
|
||||
var validateCondition: String? = null
|
||||
) : Serializable, Parcelable {
|
||||
constructor(stream: Stream) : this(format = stream.getFormat()!!) {
|
||||
when (stream) {
|
||||
is AudioStream -> {
|
||||
desiredBitrate = stream.average_bitrate
|
||||
isDesired2 = false
|
||||
kind = 'a'
|
||||
}
|
||||
is VideoStream -> {
|
||||
desired = stream.getResolution()
|
||||
isDesired2 = stream.isVideoOnly()
|
||||
kind = 'v'
|
||||
}
|
||||
is SubtitlesStream -> {
|
||||
desired = stream.languageTag
|
||||
isDesired2 = stream.isAutoGenerated
|
||||
kind = 's'
|
||||
}
|
||||
else -> throw RuntimeException("Unknown stream kind")
|
||||
}
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
val info: String
|
||||
val str = StringBuilder()
|
||||
str.append("{type=")
|
||||
when (kind) {
|
||||
'a' -> {
|
||||
str.append("audio")
|
||||
info = "bitrate=$desiredBitrate"
|
||||
}
|
||||
'v' -> {
|
||||
str.append("video")
|
||||
info = "quality=$desired videoOnly=$isDesired2"
|
||||
}
|
||||
's' -> {
|
||||
str.append("subtitles")
|
||||
info = "language=$desired autoGenerated=$isDesired2"
|
||||
}
|
||||
else -> {
|
||||
info = ""
|
||||
str.append("other")
|
||||
}
|
||||
}
|
||||
str.append(" format=")
|
||||
.append(format.getName())
|
||||
.append(' ')
|
||||
.append(info)
|
||||
.append('}')
|
||||
return str.toString()
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue