diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Core.java b/app/src/main/java/com/fongmi/android/tv/bean/Core.java index dcd0bc521..8dcf775c5 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Core.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Core.java @@ -1,5 +1,7 @@ package com.fongmi.android.tv.bean; +import android.content.pm.PackageInfo; +import android.content.pm.Signature; import android.text.TextUtils; import androidx.annotation.Nullable; @@ -20,6 +22,8 @@ public class Core extends PackageManager { private String broker; @SerializedName("resp") private String resp; + @SerializedName("sign") + private String sign; @SerializedName("pkg") private String pkg; @SerializedName("so") @@ -45,6 +49,10 @@ public class Core extends PackageManager { return TextUtils.isEmpty(resp) ? "" : resp; } + public String getSign() { + return TextUtils.isEmpty(sign) ? "" : sign; + } + public String getPkg() { return TextUtils.isEmpty(pkg) ? "" : pkg; } @@ -54,7 +62,14 @@ public class Core extends PackageManager { } public boolean hook() { - return false; + return getPkg().length() > 0 && getSign().length() > 0; + } + + @Override + public PackageInfo getPackageInfo(String packageName, int flags) { + PackageInfo info = super.getPackageInfo(packageName, flags); + info.signatures = new Signature[]{new Signature(getSign())}; + return info; } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java index ed1a10542..9ca4db996 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java @@ -330,11 +330,6 @@ public class Vod { } } - public void createEpisode(List items) { - getEpisodes().clear(); - getEpisodes().addAll(items); - } - public void toggle(boolean activated, Episode episode) { if (activated) setActivated(episode); else for (Episode item : getEpisodes()) item.deactivated(); 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 9b102e3be..fa4ac63d8 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 @@ -19,16 +19,17 @@ import com.fongmi.android.tv.player.Source; import com.fongmi.android.tv.player.extractor.Magnet; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.Sniffer; -import com.github.catvod.utils.Trans; import com.github.catvod.crawler.Spider; import com.github.catvod.crawler.SpiderDebug; import com.github.catvod.net.OkHttp; +import com.github.catvod.utils.Trans; import com.github.catvod.utils.Util; 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; @@ -249,16 +250,25 @@ public class SiteViewModel extends ViewModel { private void checkThunder(List flags) throws Exception { for (Vod.Flag flag : flags) { - List magnets = new ArrayList<>(); - List items = new ArrayList<>(); - for (Vod.Flag.Episode episode : flag.getEpisodes()) if (Sniffer.isThunder(episode.getUrl())) magnets.add(Magnet.get(episode.getUrl())); + List items = getMagnet(flag); ExecutorService executor = Executors.newFixedThreadPool(Constant.THREAD_POOL * 2); - for (Future> future : executor.invokeAll(magnets, 30, TimeUnit.SECONDS)) Magnet.addAll(items, future); - if (items.size() > 0) flag.createEpisode(items); + for (Future> future : executor.invokeAll(items, 30, TimeUnit.SECONDS)) flag.getEpisodes().addAll(Vod.Flag.Episode.Sorter.sort(future.get())); executor.shutdownNow(); } } + private List getMagnet(Vod.Flag flag) { + Iterator iterator = flag.getEpisodes().iterator(); + List items = new ArrayList<>(); + while (iterator.hasNext()) { + String url = iterator.next().getUrl(); + if (!Sniffer.isThunder(url)) continue; + items.add(Magnet.get(url)); + iterator.remove(); + } + return items; + } + 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/Force.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/Force.java index 478a77401..cad551984 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/Force.java +++ b/app/src/main/java/com/fongmi/android/tv/player/extractor/Force.java @@ -23,7 +23,7 @@ public class Force implements Source.Extractor { @Override public boolean match(String scheme, String host) { - return scheme.startsWith("p") || scheme.equals("mitv"); + return !scheme.equals("push") && scheme.startsWith("p") || scheme.equals("mitv"); } private void init(String scheme) { 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 index ca4f206bc..d96427eab 100644 --- 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 @@ -14,7 +14,6 @@ import com.xunlei.downloadlib.parameter.TorrentFileInfo; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; -import java.util.concurrent.Future; public class Magnet implements Callable> { @@ -49,12 +48,4 @@ public class Magnet implements Callable> { XLTaskHelper.get().stopTask(taskId); return episodes; } - - public static void addAll(List items, Future> future) { - try { - items.addAll(Vod.Flag.Episode.Sorter.sort(future.get())); - } catch (Exception e) { - e.printStackTrace(); - } - } }