diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index c9e950fbf..2159c87e6 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -281,7 +281,9 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback @Override public void onItemClick(Vod item) { - if (item.isFolder()) { + if (item.isAction()) { + mViewModel.action(getKey(), item.getAction()); + } else if (item.isFolder()) { mPages.add(Page.get(item, mBinding.recycler.getSelectedPosition())); mBinding.recycler.setMoveTop(false); getVideo(item.getVodId(), "1"); 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 65b0dbfde..efc8eccbb 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 @@ -73,6 +73,9 @@ public class Vod implements Parcelable { @SerializedName("vod_tag") private String vodTag; + @SerializedName("action") + private String action; + @SerializedName("cate") private Cate cate; @@ -167,6 +170,10 @@ public class Vod implements Parcelable { return TextUtils.isEmpty(vodTag) ? "" : vodTag; } + public String getAction() { + return TextUtils.isEmpty(action) ? "" : action; + } + public Cate getCate() { return cate; } @@ -231,6 +238,10 @@ public class Vod implements Parcelable { return "folder".equals(getVodTag()) || getCate() != null; } + public boolean isAction() { + return !getAction().isEmpty(); + } + public boolean isManga() { return "manga".equals(getVodTag()); } @@ -303,6 +314,7 @@ public class Vod implements Parcelable { dest.writeString(this.vodPlayFrom); dest.writeString(this.vodPlayUrl); dest.writeString(this.vodTag); + dest.writeString(this.action); dest.writeInt(this.land); dest.writeInt(this.circle); dest.writeFloat(this.ratio); @@ -326,6 +338,7 @@ public class Vod implements Parcelable { this.vodPlayFrom = in.readString(); this.vodPlayUrl = in.readString(); this.vodTag = in.readString(); + this.action = in.readString(); this.land = in.readInt(); this.circle = in.readInt(); this.ratio = in.readFloat(); 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 7735a981c..13d7de8d7 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 @@ -47,6 +47,7 @@ public class SiteViewModel extends ViewModel { public MutableLiveData result; public MutableLiveData player; public MutableLiveData search; + public MutableLiveData action; public MutableLiveData danmaku; public MutableLiveData download; private ExecutorService executor; @@ -57,6 +58,7 @@ public class SiteViewModel extends ViewModel { this.result = new MutableLiveData<>(); this.player = new MutableLiveData<>(); this.search = new MutableLiveData<>(); + this.action = new MutableLiveData<>(); this.download = new MutableLiveData<>(); } @@ -207,6 +209,14 @@ public class SiteViewModel extends ViewModel { executePlayer(download, key, flag, id); } + public void action(String key, String action) { + execute(this.action, () -> { + Site site = VodConfig.get().getSite(key); + if (site.getType() != 3) return Result.empty(); + return Result.fromJson(site.recent().spider().action(action)); + }); + } + public void searchContent(Site site, String keyword, boolean quick) throws Throwable { if (site.getType() == 3) { String searchContent = site.spider().searchContent(Trans.t2s(keyword), quick); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java index 5c94785a0..768f41b26 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java @@ -228,7 +228,9 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac @Override public void onItemClick(Vod item) { - if (item.isFolder()) { + if (item.isAction()) { + mViewModel.action(getKey(), item.getAction()); + } else if (item.isFolder()) { mPages.add(Page.get(item, findPosition())); getVideo(item.getVodId(), "1"); } else { diff --git a/catvod/src/main/java/com/github/catvod/crawler/Spider.java b/catvod/src/main/java/com/github/catvod/crawler/Spider.java index 147b03624..a5ff9cd6d 100644 --- a/catvod/src/main/java/com/github/catvod/crawler/Spider.java +++ b/catvod/src/main/java/com/github/catvod/crawler/Spider.java @@ -64,6 +64,10 @@ public abstract class Spider { return null; } + public String action(String action) throws Exception { + return null; + } + public void destroy() { } diff --git a/pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java b/pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java index fd037a30d..6f0871042 100644 --- a/pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java +++ b/pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java @@ -103,6 +103,11 @@ public class Spider extends com.github.catvod.crawler.Spider { return result; } + @Override + public String action(String action) { + return app.callAttr("action", obj, action).toString(); + } + @Override public void destroy() { app.callAttr("destroy", obj); diff --git a/pyramid/src/main/python/app.py b/pyramid/src/main/python/app.py index 499dfcd49..d09ff8145 100644 --- a/pyramid/src/main/python/app.py +++ b/pyramid/src/main/python/app.py @@ -100,6 +100,12 @@ def destroy(ru): ru.destroy() +def action(ru, action): + result = ru.action(action) + formatJo = json.dumps(result, ensure_ascii=False) + return formatJo + + def run(): pass diff --git a/pyramid/src/main/python/base/spider.py b/pyramid/src/main/python/base/spider.py index e08e06da9..cf719a994 100644 --- a/pyramid/src/main/python/base/spider.py +++ b/pyramid/src/main/python/base/spider.py @@ -57,6 +57,9 @@ class Spider(metaclass=ABCMeta): def manualVideoCheck(self): pass + def action(self, action): + pass + def destroy(self): pass diff --git a/pyramid/src/main/python/runner.py b/pyramid/src/main/python/runner.py index 553822168..16cd739da 100644 --- a/pyramid/src/main/python/runner.py +++ b/pyramid/src/main/python/runner.py @@ -41,5 +41,8 @@ class Runner(): def manualVideoCheck(self): return self.spider.manualVideoCheck() + def action(self, action): + return self.spider.action(action) + def destroy(self): - return self.spider.destroy() + self.spider.destroy() diff --git a/pyramid/src/main/python/trigger.py b/pyramid/src/main/python/trigger.py index 87fbf8fe3..419bfb5cf 100644 --- a/pyramid/src/main/python/trigger.py +++ b/pyramid/src/main/python/trigger.py @@ -39,6 +39,10 @@ class Trigger(): def manualVideoCheck(sp_obj): return sp_obj.manualVideoCheck() + @staticmethod + def action(sp_obj, action): + return sp_obj.action(action) + @staticmethod def destroy(sp_obj): - return sp_obj.destroy() + sp_obj.destroy() diff --git a/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java b/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java index a27840da4..22db32db4 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java @@ -124,6 +124,11 @@ public class Spider extends com.github.catvod.crawler.Spider { else return submit(() -> proxy1(params)).get(); } + @Override + public String action(String action) throws Exception { + return (String) call("action", action); + } + @Override public void destroy() { try {