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="關" />
+
+
+
+
+
+
+
+