From 9fc2c4d105516c3dd6bed45f317e1b7c2c8e591f Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 29 Jul 2023 18:54:52 +0800 Subject: [PATCH] Add ExtractException --- .../com/fongmi/android/tv/bean/Result.java | 26 +++++++++++++++++++ .../fongmi/android/tv/event/ErrorEvent.java | 15 +++++++++-- .../tv/exception/ExtractException.java | 12 +++++++++ .../android/tv/model/SiteViewModel.java | 4 ++- .../com/fongmi/android/tv/player/Players.java | 4 ++- .../android/tv/player/extractor/Thunder.java | 11 ++++---- .../parameter/{Error.java => ErrorCode.java} | 2 +- .../parameter/TorrentFileInfo.java | 2 +- .../downloadlib/parameter/XLTaskInfo.java | 2 +- 9 files changed, 65 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/com/fongmi/android/tv/exception/ExtractException.java rename thunder/src/main/java/com/xunlei/downloadlib/parameter/{Error.java => ErrorCode.java} (96%) diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Result.java b/app/src/main/java/com/fongmi/android/tv/bean/Result.java index 47b6ac538..54237ef5d 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Result.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Result.java @@ -60,6 +60,9 @@ public class Result { @SerializedName("subs") private List 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(); } diff --git a/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java b/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java index 7766044c9..0efe2468e 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java @@ -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 } } diff --git a/app/src/main/java/com/fongmi/android/tv/exception/ExtractException.java b/app/src/main/java/com/fongmi/android/tv/exception/ExtractException.java new file mode 100644 index 000000000..f19debbe8 --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/exception/ExtractException.java @@ -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); + } +} diff --git a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java index 3128050da..0d1782ec2 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java @@ -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(); } }); diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index c87669796..7378a7552 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -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(); diff --git a/app/src/main/java/com/fongmi/android/tv/player/extractor/Thunder.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/Thunder.java index 4f3a35f14..b79ec0163 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/Thunder.java +++ b/app/src/main/java/com/fongmi/android/tv/player/extractor/Thunder.java @@ -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); } diff --git a/thunder/src/main/java/com/xunlei/downloadlib/parameter/Error.java b/thunder/src/main/java/com/xunlei/downloadlib/parameter/ErrorCode.java similarity index 96% rename from thunder/src/main/java/com/xunlei/downloadlib/parameter/Error.java rename to thunder/src/main/java/com/xunlei/downloadlib/parameter/ErrorCode.java index 3094f3dc8..6a6646f97 100644 --- a/thunder/src/main/java/com/xunlei/downloadlib/parameter/Error.java +++ b/thunder/src/main/java/com/xunlei/downloadlib/parameter/ErrorCode.java @@ -1,6 +1,6 @@ package com.xunlei.downloadlib.parameter; -public class Error { +public class ErrorCode { public static String get(int code) { switch (code) { diff --git a/thunder/src/main/java/com/xunlei/downloadlib/parameter/TorrentFileInfo.java b/thunder/src/main/java/com/xunlei/downloadlib/parameter/TorrentFileInfo.java index e3bbaad91..0dc7bc368 100644 --- a/thunder/src/main/java/com/xunlei/downloadlib/parameter/TorrentFileInfo.java +++ b/thunder/src/main/java/com/xunlei/downloadlib/parameter/TorrentFileInfo.java @@ -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() { diff --git a/thunder/src/main/java/com/xunlei/downloadlib/parameter/XLTaskInfo.java b/thunder/src/main/java/com/xunlei/downloadlib/parameter/XLTaskInfo.java index 6a69795e3..b5272eede 100644 --- a/thunder/src/main/java/com/xunlei/downloadlib/parameter/XLTaskInfo.java +++ b/thunder/src/main/java/com/xunlei/downloadlib/parameter/XLTaskInfo.java @@ -83,7 +83,7 @@ public class XLTaskInfo implements Parcelable { } public String getErrorMsg() { - return Error.get(mErrorCode); + return ErrorCode.get(mErrorCode); } @Override