Add danmaku auto search

fongmi
FongMi 2 weeks ago
parent 4aaf943fd5
commit dfd24bc298
  1. 3
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  2. 48
      app/src/main/java/com/fongmi/android/tv/api/DanmakuApi.java
  3. 13
      app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuSearchDialog.java
  4. 3
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java

@ -32,6 +32,7 @@ import com.bumptech.glide.request.transition.Transition;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.Constant;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.api.DanmakuApi;
import com.fongmi.android.tv.api.SiteApi;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.bean.Danmaku;
@ -494,6 +495,7 @@ 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(result)) DanmakuApi.search(mHistory.getVodName(), getEpisode().getName(), danmaku -> player().setDanmaku(danmaku));
}
@Override
@ -1439,6 +1441,7 @@ public class VideoActivity extends PlaybackActivity implements CustomKeyDownVod.
protected void onDestroy() {
mClock.release();
saveHistory(true);
DanmakuApi.cancel();
RefreshEvent.keep();
App.removeCallbacks(mR1, mR2, mR3, mR4);
mViewModel.getResult().removeObserver(mObserveDetail);

@ -0,0 +1,48 @@
package com.fongmi.android.tv.api;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.bean.Danmaku;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.impl.Callback;
import com.fongmi.android.tv.setting.DanmakuSetting;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Trans;
import java.util.function.Consumer;
import okhttp3.Call;
import okhttp3.Response;
public class DanmakuApi {
private static final String TAG = DanmakuApi.class.getSimpleName();
public static boolean canSearch(Result result) {
return result.getDanmaku().isEmpty() && DanmakuSetting.isLoad() && !TextUtils.isEmpty(VodConfig.get().getConfig().getDanmaku());
}
public static Call newCall(String name, String episode) {
return OkHttp.newCall(VodConfig.get().getConfig().getDanmaku().replace("{name}", Trans.t2s(name)).replace("{episode}", Trans.t2s(episode)), TAG);
}
public static void search(String name, String episode, Consumer<Danmaku> found) {
newCall(name, episode).enqueue(new Callback() {
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) {
try {
Danmaku.arrayFrom(response.body().string()).stream().findFirst().ifPresent(item -> App.post(() -> found.accept(item)));
} catch (Exception ignored) {
}
}
});
}
public static void cancel() {
OkHttp.cancel(TAG);
}
}

@ -15,7 +15,7 @@ import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.api.DanmakuApi;
import com.fongmi.android.tv.bean.Danmaku;
import com.fongmi.android.tv.databinding.DialogDanmakuSearchBinding;
import com.fongmi.android.tv.player.PlayerManager;
@ -25,8 +25,6 @@ import com.fongmi.android.tv.utils.KeyUtil;
import com.fongmi.android.tv.utils.Notify;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.Util;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Trans;
import java.io.IOException;
import java.util.List;
@ -37,7 +35,6 @@ import okhttp3.Response;
public final class DanmakuSearchDialog extends BaseBottomSheetDialog implements DanmakuAdapter.OnClickListener, Callback {
private final String TAG = DanmakuSearchDialog.class.getSimpleName();
private final DanmakuAdapter adapter;
private DialogDanmakuSearchBinding binding;
private PlayerManager player;
@ -111,12 +108,8 @@ public final class DanmakuSearchDialog extends BaseBottomSheetDialog implements
private void search() {
showProgress();
adapter.clear();
OkHttp.cancel(TAG);
Util.hideKeyboard(binding.keyword);
String name = binding.keyword.getText().toString().trim();
String episode = player.getMetadata().artist.toString().trim();
String url = VodConfig.get().getConfig().getDanmaku().replace("{name}", Trans.t2s(name)).replace("{episode}", Trans.t2s(episode));
OkHttp.newCall(url, TAG).enqueue(this);
DanmakuApi.newCall(binding.keyword.getText().toString().trim(), player.getMetadata().artist.toString().trim()).enqueue(this);
}
private void onSuccess(List<Danmaku> items) {
@ -149,6 +142,6 @@ public final class DanmakuSearchDialog extends BaseBottomSheetDialog implements
@Override
public void onDestroyView() {
super.onDestroyView();
OkHttp.cancel(TAG);
DanmakuApi.cancel();
}
}

@ -41,6 +41,7 @@ import com.fongmi.android.tv.App;
import com.fongmi.android.tv.Constant;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.api.SiteApi;
import com.fongmi.android.tv.api.DanmakuApi;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.bean.CastVideo;
import com.fongmi.android.tv.bean.Danmaku;
@ -556,6 +557,7 @@ 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(result)) DanmakuApi.search(mHistory.getVodName(), getEpisode().getName(), danmaku -> player().setDanmaku(danmaku));
}
@Override
@ -1663,6 +1665,7 @@ public class VideoActivity extends PlaybackActivity implements Clock.Callback, C
mClock.release();
saveHistory(true);
Timer.get().reset();
DanmakuApi.cancel();
RefreshEvent.keep();
App.removeCallbacks(mR1, mR2, mR3, mR4);
mViewModel.getResult().removeObserver(mObserveDetail);

Loading…
Cancel
Save