Add ExtractException

pull/137/head
FongMi 3 years ago
parent aedd800a26
commit 9fc2c4d105
  1. 26
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  2. 15
      app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java
  3. 12
      app/src/main/java/com/fongmi/android/tv/exception/ExtractException.java
  4. 4
      app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java
  5. 4
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  6. 11
      app/src/main/java/com/fongmi/android/tv/player/extractor/Thunder.java
  7. 2
      thunder/src/main/java/com/xunlei/downloadlib/parameter/ErrorCode.java
  8. 2
      thunder/src/main/java/com/xunlei/downloadlib/parameter/TorrentFileInfo.java
  9. 2
      thunder/src/main/java/com/xunlei/downloadlib/parameter/XLTaskInfo.java

@ -60,6 +60,9 @@ public class Result {
@SerializedName("subs")
private List<Sub> subs;
private boolean error;
private String msg;
public static Result fromJson(String str) {
try {
Result result = FilterAdapter.gson().fromJson(str, Result.class);
@ -93,6 +96,13 @@ public class Result {
return new Result();
}
public static Result error(String msg) {
Result result = new Result();
result.setError(true);
result.setMsg(msg);
return new Result();
}
public static Result folder(Vod item) {
Result result = new Result();
Class type = new Class();
@ -201,6 +211,22 @@ public class Result {
return subs == null ? Collections.emptyList() : subs;
}
public boolean isError() {
return error;
}
public void setError(boolean error) {
this.error = error;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getRealUrl() {
return getPlayUrl() + getUrl();
}

@ -9,6 +9,7 @@ public class ErrorEvent {
private final Type type;
private final int retry;
private String msg;
public static void url() {
EventBus.getDefault().post(new ErrorEvent(Type.URL, 0));
@ -30,11 +31,21 @@ public class ErrorEvent {
EventBus.getDefault().post(new ErrorEvent(Type.TIMEOUT, 0));
}
public static void extract(String msg) {
EventBus.getDefault().post(new ErrorEvent(Type.EXTRACT, 0, msg));
}
public ErrorEvent(Type type, int retry) {
this.type = type;
this.retry = retry;
}
public ErrorEvent(Type type, int retry, String msg) {
this.type = type;
this.retry = retry;
this.msg = msg;
}
private int getResId() {
if (type == Type.URL) return R.string.error_play_url;
if (type == Type.PARSE) return R.string.error_play_parse;
@ -57,10 +68,10 @@ public class ErrorEvent {
}
public String getMsg() {
return getResId() == -1 ? "" : ResUtil.getString(getResId());
return getResId() == -1 ? msg : ResUtil.getString(getResId());
}
public enum Type {
URL, PARSE, FORMAT, EPISODE, TIMEOUT
URL, PARSE, FORMAT, EPISODE, TIMEOUT, EXTRACT
}
}

@ -0,0 +1,12 @@
package com.fongmi.android.tv.exception;
import androidx.annotation.Nullable;
import java.util.concurrent.ExecutionException;
public class ExtractException extends ExecutionException {
public ExtractException(@Nullable String msg) {
super(msg);
}
}

@ -14,6 +14,7 @@ import com.fongmi.android.tv.api.ApiConfig;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.bean.Vod;
import com.fongmi.android.tv.exception.ExtractException;
import com.fongmi.android.tv.player.Source;
import com.fongmi.android.tv.player.extractor.Magnet;
import com.fongmi.android.tv.utils.ResUtil;
@ -240,7 +241,8 @@ public class SiteViewModel extends ViewModel {
result.postValue(executor.submit(callable).get(Constant.TIMEOUT_VOD, TimeUnit.MILLISECONDS));
} catch (Throwable e) {
if (e instanceof InterruptedException || Thread.interrupted()) return;
result.postValue(Result.empty());
if (e.getCause() instanceof ExtractException) result.postValue(Result.error(e.getCause().getMessage()));
else result.postValue(Result.empty());
e.printStackTrace();
}
});

@ -301,7 +301,9 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
}
public void start(Result result, boolean useParse, int timeout) {
if (result.getUrl().isEmpty()) {
if (result.isError()) {
ErrorEvent.extract(result.getMsg());
} else if (result.getUrl().isEmpty()) {
ErrorEvent.url();
} else if (result.getParse(1) == 1 || result.getJx() == 1) {
stopParse();

@ -3,9 +3,8 @@ package com.fongmi.android.tv.player.extractor;
import android.net.Uri;
import android.os.SystemClock;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.exception.ExtractException;
import com.fongmi.android.tv.player.Source;
import com.fongmi.android.tv.utils.Notify;
import com.github.catvod.utils.Path;
import com.github.catvod.utils.Util;
import com.xunlei.downloadlib.XLTaskHelper;
@ -21,22 +20,22 @@ public class Thunder implements Source.Extractor {
@Override
public boolean match(String scheme, String host) {
return scheme.equals("ed2k") || scheme.equals("ftp") || scheme.equals("torrent");
return scheme.equals("magnet") || scheme.equals("ed2k") || scheme.equals("ftp");
}
@Override
public String fetch(String url) throws Exception {
return Util.scheme(url).equals("torrent") ? addTorrentTask(Uri.parse(url)) : addThunderTask(url);
return Util.scheme(url).equals("magnet") ? addTorrentTask(Uri.parse(url)) : addThunderTask(url);
}
private String addTorrentTask(Uri uri) {
private String addTorrentTask(Uri uri) throws Exception {
File torrent = new File(uri.getPath());
String name = uri.getQueryParameter("name");
int index = Integer.parseInt(uri.getQueryParameter("index"));
taskId = XLTaskHelper.get().addTorrentTask(torrent, Objects.requireNonNull(torrent.getParentFile()), index);
while (true) {
XLTaskInfo taskInfo = XLTaskHelper.get().getBtSubTaskInfo(taskId, index).mTaskInfo;
if (taskInfo.mTaskStatus == 3) App.post(() -> Notify.show(taskInfo.getErrorMsg()));
if (taskInfo.mTaskStatus == 3) throw new ExtractException(taskInfo.getErrorMsg());
if (taskInfo.mTaskStatus != 0) return XLTaskHelper.get().getLocalUrl(new File(torrent.getParent(), name));
else SystemClock.sleep(50);
}

@ -1,6 +1,6 @@
package com.xunlei.downloadlib.parameter;
public class Error {
public class ErrorCode {
public static String get(int code) {
switch (code) {

@ -32,7 +32,7 @@ public class TorrentFileInfo {
}
public String getPlayUrl() {
return "torrent://" + getFile().getAbsolutePath() + "?name=" + getFileName() + "&index=" + getFileIndex();
return "magnet://" + getFile().getAbsolutePath() + "?name=" + getFileName() + "&index=" + getFileIndex();
}
public String getExt() {

@ -83,7 +83,7 @@ public class XLTaskInfo implements Parcelable {
}
public String getErrorMsg() {
return Error.get(mErrorCode);
return ErrorCode.get(mErrorCode);
}
@Override

Loading…
Cancel
Save