diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingDanmakuActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingDanmakuActivity.java index 82781c141..da0064c05 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingDanmakuActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingDanmakuActivity.java @@ -42,6 +42,7 @@ public class SettingDanmakuActivity extends BaseActivity implements DanmakuCallb mBinding.danmakuApiText.setText(getApiStatus()); mBinding.danmakuAutoText.setText(getSwitch(DanmakuSetting.isAuto())); mBinding.danmakuLoadText.setText(getSwitch(DanmakuSetting.isLoad())); + mBinding.danmakuSpiderText.setText(getSwitch(DanmakuSetting.isSpiderFirst())); updateApiVisibility(); } @@ -50,6 +51,7 @@ public class SettingDanmakuActivity extends BaseActivity implements DanmakuCallb mBinding.danmakuApi.setOnClickListener(this::onDanmakuApi); mBinding.danmakuAuto.setOnClickListener(this::setDanmakuAuto); mBinding.danmakuLoad.setOnClickListener(this::setDanmakuLoad); + mBinding.danmakuSpider.setOnClickListener(this::setDanmakuSpider); } private void setDanmakuLoad(View view) { @@ -67,6 +69,12 @@ public class SettingDanmakuActivity extends BaseActivity implements DanmakuCallb private void updateAutoVisibility() { boolean show = DanmakuSetting.isLoad() && !TextUtils.isEmpty(DanmakuSetting.getEffectiveApiUrl()); mBinding.danmakuAuto.setVisibility(show ? View.VISIBLE : View.GONE); + updateSpiderVisibility(); + } + + private void updateSpiderVisibility() { + boolean show = DanmakuSetting.isLoad() && !TextUtils.isEmpty(DanmakuSetting.getEffectiveApiUrl()) && DanmakuSetting.isAuto(); + mBinding.danmakuSpider.setVisibility(show ? View.VISIBLE : View.GONE); } private void onDanmakuApi(View view) { @@ -83,5 +91,11 @@ public class SettingDanmakuActivity extends BaseActivity implements DanmakuCallb private void setDanmakuAuto(View view) { DanmakuSetting.putAuto(!DanmakuSetting.isAuto()); mBinding.danmakuAutoText.setText(getSwitch(DanmakuSetting.isAuto())); + updateSpiderVisibility(); + } + + private void setDanmakuSpider(View view) { + DanmakuSetting.putSpiderFirst(!DanmakuSetting.isSpiderFirst()); + mBinding.danmakuSpiderText.setText(getSwitch(DanmakuSetting.isSpiderFirst())); } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 128e19c56..5f5bb44b1 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -495,7 +495,10 @@ public class VideoActivity extends PlaybackActivity implements CustomKeyDownVod. if (result.hasPosition()) mHistory.setPosition(result.getPosition()); mBinding.control.parse.setVisibility(isUseParse() ? View.VISIBLE : View.GONE); startPlayer(getHistoryKey(), result, isUseParse(), getSite().getTimeout(), buildMetadata()); - if (DanmakuApi.canSearch()) DanmakuApi.search(mHistory.getVodName(), getEpisode().getName(), danmaku -> player().setDanmaku(danmaku)); + if (DanmakuApi.canSearch()) DanmakuApi.search(mHistory.getVodName(), getEpisode().getName(), danmaku -> { + if (DanmakuSetting.isSpiderFirst() && !result.getDanmaku().isEmpty()) player().addDanmaku(danmaku); + else player().setDanmaku(danmaku); + }); } @Override diff --git a/app/src/leanback/res/layout/activity_setting_danmaku.xml b/app/src/leanback/res/layout/activity_setting_danmaku.xml index 52ac7acb0..08d6b4bf9 100644 --- a/app/src/leanback/res/layout/activity_setting_danmaku.xml +++ b/app/src/leanback/res/layout/activity_setting_danmaku.xml @@ -104,5 +104,36 @@ tools:text="關" /> + + + + + + + + diff --git a/app/src/main/java/com/fongmi/android/tv/player/PlayerManager.java b/app/src/main/java/com/fongmi/android/tv/player/PlayerManager.java index 714a167b6..516d01bd2 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/PlayerManager.java +++ b/app/src/main/java/com/fongmi/android/tv/player/PlayerManager.java @@ -366,6 +366,11 @@ public class PlayerManager implements ParseCallback { else danmakuController.setDataSource(Uri.parse(item.getRealUrl())); } + public void addDanmaku(Danmaku item) { + if (danmakuController == null || item.isEmpty()) return; + if (spec != null) spec.addDanmaku(item); + } + @Override public void onParseSuccess(Map headers, String url, String from) { if (!TextUtils.isEmpty(from)) Notify.show(ResUtil.getString(R.string.parse_from, from)); diff --git a/app/src/main/java/com/fongmi/android/tv/player/engine/PlaySpec.java b/app/src/main/java/com/fongmi/android/tv/player/engine/PlaySpec.java index c30545981..a35f4746e 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/engine/PlaySpec.java +++ b/app/src/main/java/com/fongmi/android/tv/player/engine/PlaySpec.java @@ -124,4 +124,9 @@ public class PlaySpec { if (!item.isEmpty() && !danmakus.contains(item)) danmakus.add(0, item); danmakus.forEach(danmaku -> danmaku.setSelected(danmaku.getUrl().equals(item.getUrl()))); } + + public void addDanmaku(Danmaku item) { + if (danmakus == null) danmakus = new ArrayList<>(); + if (!item.isEmpty() && !danmakus.contains(item)) danmakus.add(item); + } } diff --git a/app/src/main/java/com/fongmi/android/tv/setting/DanmakuSetting.java b/app/src/main/java/com/fongmi/android/tv/setting/DanmakuSetting.java index 1eb0bfe2c..dde33d9cd 100644 --- a/app/src/main/java/com/fongmi/android/tv/setting/DanmakuSetting.java +++ b/app/src/main/java/com/fongmi/android/tv/setting/DanmakuSetting.java @@ -25,6 +25,14 @@ public class DanmakuSetting { Prefers.put("danmaku_auto", auto); } + public static boolean isSpiderFirst() { + return Prefers.getBoolean("danmaku_spider_first"); + } + + public static void putSpiderFirst(boolean spiderFirst) { + Prefers.put("danmaku_spider_first", spiderFirst); + } + public static String getApiUrl() { return Prefers.getString("danmaku_api_url", ""); } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index af3ee58ea..bb1c6c4c0 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -156,6 +156,7 @@ 弹幕加载 搜索接口 自动搜索 + 爬虫优先 关键字… diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 714e8699a..cf0c6bd2a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -156,6 +156,7 @@ 彈幕載入 搜尋接口 自動搜尋 + 爬蟲優先 關鍵字… diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 51e5d4afe..669295379 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -157,6 +157,7 @@ Danmaku load Search API Auto search + Spider first Keywords… diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 0bffd755b..f2d87a220 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -557,7 +557,10 @@ public class VideoActivity extends PlaybackActivity implements Clock.Callback, C if (result.hasDesc()) setText(mBinding.content, 0, result.getDesc()); mBinding.control.parse.setVisibility(isUseParse() ? View.VISIBLE : View.GONE); startPlayer(getHistoryKey(), result, isUseParse(), getSite().getTimeout(), buildMetadata()); - if (DanmakuApi.canSearch()) DanmakuApi.search(mHistory.getVodName(), getEpisode().getName(), danmaku -> player().setDanmaku(danmaku)); + if (DanmakuApi.canSearch()) DanmakuApi.search(mHistory.getVodName(), getEpisode().getName(), danmaku -> { + if (DanmakuSetting.isSpiderFirst() && !result.getDanmaku().isEmpty()) player().addDanmaku(danmaku); + else player().setDanmaku(danmaku); + }); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingDanmakuFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingDanmakuFragment.java index 74db1da7c..769ac7514 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingDanmakuFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingDanmakuFragment.java @@ -42,6 +42,7 @@ public class SettingDanmakuFragment extends BaseFragment implements DanmakuCallb mBinding.danmakuApiText.setText(getApiStatus()); mBinding.danmakuAutoText.setText(getSwitch(DanmakuSetting.isAuto())); mBinding.danmakuLoadText.setText(getSwitch(DanmakuSetting.isLoad())); + mBinding.danmakuSpiderText.setText(getSwitch(DanmakuSetting.isSpiderFirst())); updateApiVisibility(); } @@ -50,6 +51,7 @@ public class SettingDanmakuFragment extends BaseFragment implements DanmakuCallb mBinding.danmakuApi.setOnClickListener(this::onDanmakuApi); mBinding.danmakuAuto.setOnClickListener(this::setDanmakuAuto); mBinding.danmakuLoad.setOnClickListener(this::setDanmakuLoad); + mBinding.danmakuSpider.setOnClickListener(this::setDanmakuSpider); } private void setDanmakuLoad(View view) { @@ -67,6 +69,12 @@ public class SettingDanmakuFragment extends BaseFragment implements DanmakuCallb private void updateAutoVisibility() { boolean show = DanmakuSetting.isLoad() && !TextUtils.isEmpty(DanmakuSetting.getEffectiveApiUrl()); mBinding.danmakuAuto.setVisibility(show ? View.VISIBLE : View.GONE); + updateSpiderVisibility(); + } + + private void updateSpiderVisibility() { + boolean show = DanmakuSetting.isLoad() && !TextUtils.isEmpty(DanmakuSetting.getEffectiveApiUrl()) && DanmakuSetting.isAuto(); + mBinding.danmakuSpider.setVisibility(show ? View.VISIBLE : View.GONE); } private void onDanmakuApi(View view) { @@ -83,6 +91,12 @@ public class SettingDanmakuFragment extends BaseFragment implements DanmakuCallb private void setDanmakuAuto(View view) { DanmakuSetting.putAuto(!DanmakuSetting.isAuto()); mBinding.danmakuAutoText.setText(getSwitch(DanmakuSetting.isAuto())); + updateSpiderVisibility(); + } + + private void setDanmakuSpider(View view) { + DanmakuSetting.putSpiderFirst(!DanmakuSetting.isSpiderFirst()); + mBinding.danmakuSpiderText.setText(getSwitch(DanmakuSetting.isSpiderFirst())); } @Override diff --git a/app/src/mobile/res/layout/fragment_setting_danmaku.xml b/app/src/mobile/res/layout/fragment_setting_danmaku.xml index 2af505d2b..cbcd60c96 100644 --- a/app/src/mobile/res/layout/fragment_setting_danmaku.xml +++ b/app/src/mobile/res/layout/fragment_setting_danmaku.xml @@ -113,6 +113,35 @@ tools:text="關" /> + + + + + + + +