From 1d3f7bef3b5dc093404006c0523a060c81737785 Mon Sep 17 00:00:00 2001 From: FongMi Date: Fri, 23 Feb 2024 09:15:48 +0800 Subject: [PATCH] Clean code --- .../java/com/fongmi/android/tv/bean/Flag.java | 17 ------- .../android/tv/model/SiteViewModel.java | 18 ++++++- .../android/tv/player/extractor/Magnet.java | 49 ------------------- .../android/tv/player/extractor/Thunder.java | 40 +++++++++++++++ .../com/fongmi/android/tv/utils/Sniffer.java | 17 +++---- 5 files changed, 65 insertions(+), 76 deletions(-) delete mode 100644 app/src/main/java/com/fongmi/android/tv/player/extractor/Magnet.java diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Flag.java b/app/src/main/java/com/fongmi/android/tv/bean/Flag.java index adc276259..495d5e8cc 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Flag.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Flag.java @@ -7,8 +7,6 @@ import android.text.TextUtils; import androidx.annotation.NonNull; import com.fongmi.android.tv.App; -import com.fongmi.android.tv.player.extractor.Magnet; -import com.fongmi.android.tv.utils.Sniffer; import com.fongmi.android.tv.utils.Util; import com.github.catvod.utils.Trans; import com.google.gson.annotations.SerializedName; @@ -17,7 +15,6 @@ import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Text; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -124,20 +121,6 @@ public class Flag implements Parcelable { return List.of(item); } - public List getMagnet() { - Iterator iterator = getEpisodes().iterator(); - List items = new ArrayList<>(); - while (iterator.hasNext()) addMagnet(iterator, items); - return items; - } - - private void addMagnet(Iterator iterator, List items) { - String url = iterator.next().getUrl(); - if (!Sniffer.isThunder(url)) return; - items.add(Magnet.get(url)); - iterator.remove(); - } - @Override public boolean equals(Object obj) { if (this == obj) return true; 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 61ed2030b..b018d7600 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 @@ -20,6 +20,7 @@ import com.fongmi.android.tv.bean.Url; 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.Thunder; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.Sniffer; import com.github.catvod.crawler.Spider; @@ -32,6 +33,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; @@ -269,11 +271,25 @@ public class SiteViewModel extends ViewModel { private void checkThunder(List flags) throws Exception { for (Flag flag : flags) { ExecutorService executor = Executors.newFixedThreadPool(Constant.THREAD_POOL * 2); - for (Future> future : executor.invokeAll(flag.getMagnet(), 30, TimeUnit.SECONDS)) flag.getEpisodes().addAll(future.get()); + for (Future> future : executor.invokeAll(getThunder(flag), 30, TimeUnit.SECONDS)) flag.getEpisodes().addAll(future.get()); executor.shutdownNow(); } } + private List getThunder(Flag flag) { + List items = new ArrayList<>(); + Iterator iterator = flag.getEpisodes().iterator(); + while (iterator.hasNext()) addThunder(iterator, items); + return items; + } + + private void addThunder(Iterator iterator, List items) { + String url = iterator.next().getUrl(); + if (!Sniffer.isThunder(url)) return; + items.add(Thunder.Parser.get(url)); + iterator.remove(); + } + private void post(Site site, Result result) { if (result.getList().isEmpty()) return; for (Vod vod : result.getList()) vod.setSite(site); diff --git a/app/src/main/java/com/fongmi/android/tv/player/extractor/Magnet.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/Magnet.java deleted file mode 100644 index 4c9fec716..000000000 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/Magnet.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.fongmi.android.tv.player.extractor; - -import android.os.SystemClock; - -import com.fongmi.android.tv.bean.Episode; -import com.fongmi.android.tv.utils.Download; -import com.fongmi.android.tv.utils.Sniffer; -import com.github.catvod.utils.Path; -import com.github.catvod.utils.Util; -import com.xunlei.downloadlib.XLTaskHelper; -import com.xunlei.downloadlib.parameter.GetTaskId; -import com.xunlei.downloadlib.parameter.TorrentFileInfo; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Callable; - -public class Magnet implements Callable> { - - private final String url; - private int time; - - public static Magnet get(String url) { - return new Magnet(url); - } - - public Magnet(String url) { - this.url = url; - } - - private void sleep() { - SystemClock.sleep(10); - time += 10; - } - - @Override - public List call() { - boolean torrent = Sniffer.isTorrent(url); - List episodes = new ArrayList<>(); - GetTaskId taskId = XLTaskHelper.get().parse(url, Path.thunder(Util.md5(url))); - if (!torrent && !taskId.getRealUrl().startsWith("magnet")) return List.of(Episode.create(taskId.getFileName(), taskId.getRealUrl())); - if (torrent) Download.create(url, taskId.getSaveFile()).start(); - else while (XLTaskHelper.get().getTaskInfo(taskId).getTaskStatus() != 2 && time < 5000) sleep(); - List medias = XLTaskHelper.get().getTorrentInfo(taskId.getSaveFile()).getMedias(); - for (TorrentFileInfo media : medias) episodes.add(Episode.create(media.getFileName(), media.getSize(), media.getPlayUrl())); - XLTaskHelper.get().stopTask(taskId); - return episodes; - } -} 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 ef5efb2e2..a2f5f051d 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,17 +3,24 @@ package com.fongmi.android.tv.player.extractor; import android.net.Uri; import android.os.SystemClock; +import com.fongmi.android.tv.bean.Episode; import com.fongmi.android.tv.exception.ExtractException; import com.fongmi.android.tv.player.Source; +import com.fongmi.android.tv.utils.Download; +import com.fongmi.android.tv.utils.Sniffer; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.utils.Path; import com.github.catvod.utils.Util; import com.xunlei.downloadlib.XLTaskHelper; import com.xunlei.downloadlib.parameter.GetTaskId; +import com.xunlei.downloadlib.parameter.TorrentFileInfo; import com.xunlei.downloadlib.parameter.XLTaskInfo; import java.io.File; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; +import java.util.concurrent.Callable; public class Thunder implements Source.Extractor { @@ -59,4 +66,37 @@ public class Thunder implements Source.Extractor { public void exit() { XLTaskHelper.get().release(); } + + public static class Parser implements Callable> { + + private final String url; + private int time; + + public static Parser get(String url) { + return new Parser(url); + } + + public Parser(String url) { + this.url = url; + } + + private void sleep() { + SystemClock.sleep(10); + time += 10; + } + + @Override + public List call() { + boolean torrent = Sniffer.isTorrent(url); + List episodes = new ArrayList<>(); + GetTaskId taskId = XLTaskHelper.get().parse(url, Path.thunder(Util.md5(url))); + if (!torrent && !taskId.getRealUrl().startsWith("magnet")) return List.of(Episode.create(taskId.getFileName(), taskId.getRealUrl())); + if (torrent) Download.create(url, taskId.getSaveFile()).start(); + else while (XLTaskHelper.get().getTaskInfo(taskId).getTaskStatus() != 2 && time < 5000) sleep(); + List medias = XLTaskHelper.get().getTorrentInfo(taskId.getSaveFile()).getMedias(); + for (TorrentFileInfo media : medias) episodes.add(Episode.create(media.getFileName(), media.getSize(), media.getPlayUrl())); + XLTaskHelper.get().stopTask(taskId); + return episodes; + } + } } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Sniffer.java b/app/src/main/java/com/fongmi/android/tv/utils/Sniffer.java index 0eb3a0d68..42a36e6a0 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Sniffer.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Sniffer.java @@ -18,8 +18,15 @@ public class Sniffer { public static final Pattern CLICKER = Pattern.compile("\\[a=cr:(\\{.*?\\})\\/](.*?)\\[\\/a]"); public static final Pattern AI_PUSH = Pattern.compile("(http|https|rtmp|rtsp|smb|ftp|thunder|magnet|ed2k|mitv|tvbox-xg|jianpian|video):[^\\s]+", Pattern.MULTILINE); public static final Pattern SNIFFER = Pattern.compile("http((?!http).){12,}?\\.(m3u8|mp4|mkv|flv|mp3|m4a|aac)\\?.*|http((?!http).){12,}\\.(m3u8|mp4|mkv|flv|mp3|m4a|aac)|http((?!http).)*?video/tos*|http((?!http).)*?obj/tos*"); + public static final Pattern THUNDER = Pattern.compile("(magnet|thunder|ed2k):.*"); - public static final List THUNDER = Arrays.asList("thunder", "magnet", "ed2k"); + public static boolean isThunder(String url) { + return THUNDER.matcher(url).find() || isTorrent(url); + } + + public static boolean isTorrent(String url) { + return !url.startsWith("magnet") && url.split(";")[0].endsWith(".torrent"); + } public static String getUrl(String text) { if (Json.valid(text)) return text; @@ -28,14 +35,6 @@ public class Sniffer { return text; } - public static boolean isThunder(String url) { - return THUNDER.contains(UrlUtil.scheme(url)) || isTorrent(url); - } - - public static boolean isTorrent(String url) { - return !url.startsWith("magnet") && url.split(";")[0].endsWith(".torrent"); - } - public static boolean isVideoFormat(String url) { Rule rule = getRule(UrlUtil.uri(url)); for (String exclude : rule.getExclude()) if (url.contains(exclude)) return false;