diff --git a/app/src/main/java/com/fongmi/bear/bean/Vod.java b/app/src/main/java/com/fongmi/bear/bean/Vod.java index ec351ddb0..012af81e0 100644 --- a/app/src/main/java/com/fongmi/bear/bean/Vod.java +++ b/app/src/main/java/com/fongmi/bear/bean/Vod.java @@ -36,6 +36,8 @@ public class Vod { @SerializedName("vod_play_url") private String vodPlayUrl; + private List vodFlags; + public static Vod objectFrom(String str) { return new Gson().fromJson(str, Vod.class); } @@ -88,25 +90,16 @@ public class Vod { return TextUtils.isEmpty(vodPlayUrl) ? "" : vodPlayUrl; } - public int getRemarkVisible() { - return getVodRemarks().isEmpty() ? View.GONE : View.VISIBLE; + public List getVodFlags() { + return vodFlags; } - public List getVodFlags() { - List items = new ArrayList<>(); - String[] playFlags = getVodPlayFrom().split("\\$\\$\\$"); - String[] playUrls = getVodPlayUrl().split("\\$\\$\\$"); - for (int i = 0; i < playFlags.length; i++) { - Flag item = new Flag(playFlags[i]); - String[] urls = playUrls[i].contains("#") ? playUrls[i].split("#") : new String[]{playUrls[i]}; - for (String url : urls) { - if (!url.contains("$")) continue; - String[] split = url.split("\\$"); - if (split.length >= 2) item.episodes.add(new Flag.Episode(split[0], split[1])); - } - items.add(item); - } - return items; + public void setVodFlags(List vodFlags) { + this.vodFlags = vodFlags; + } + + public int getRemarkVisible() { + return getVodRemarks().isEmpty() ? View.GONE : View.VISIBLE; } public static class Flag { diff --git a/app/src/main/java/com/fongmi/bear/model/SiteViewModel.java b/app/src/main/java/com/fongmi/bear/model/SiteViewModel.java index 3beb88117..5da4b050b 100644 --- a/app/src/main/java/com/fongmi/bear/model/SiteViewModel.java +++ b/app/src/main/java/com/fongmi/bear/model/SiteViewModel.java @@ -1,16 +1,16 @@ package com.fongmi.bear.model; -import android.text.TextUtils; - import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import com.fongmi.bear.ApiConfig; import com.fongmi.bear.bean.Result; import com.fongmi.bear.bean.Site; +import com.fongmi.bear.bean.Vod; import com.github.catvod.crawler.Spider; import com.github.catvod.crawler.SpiderDebug; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.concurrent.Callable; @@ -24,6 +24,10 @@ public class SiteViewModel extends ViewModel { public MutableLiveData mResult; public ExecutorService mService; + private enum Func { + HOME, CATEGORY, DETAIL, PLAYER, SEARCH + } + public SiteViewModel() { this.mService = Executors.newFixedThreadPool(2); this.mResult = new MutableLiveData<>(); @@ -35,26 +39,22 @@ public class SiteViewModel extends ViewModel { public void homeContent() { Site home = ApiConfig.get().getHome(); - if (TextUtils.isEmpty(home.getKey())) { - mResult.postValue(new Result()); - } else { - postResult(() -> { - Spider spider = ApiConfig.get().getCSP(home); - String homeContent = spider.homeContent(false); - SpiderDebug.json(homeContent); - Result result = Result.objectFrom(homeContent); - if (result.getList().size() > 0) return result; - String homeVideoContent = spider.homeVideoContent(); - SpiderDebug.json(homeVideoContent); - result.setList(Result.objectFrom(homeVideoContent).getList()); - return result; - }); - } + postResult(Func.HOME, () -> { + Spider spider = ApiConfig.get().getCSP(home); + String homeContent = spider.homeContent(false); + SpiderDebug.json(homeContent); + Result result = Result.objectFrom(homeContent); + if (result.getList().size() > 0) return result; + String homeVideoContent = spider.homeVideoContent(); + SpiderDebug.json(homeVideoContent); + result.setList(Result.objectFrom(homeVideoContent).getList()); + return result; + }); } public void categoryContent(String tid, String page, boolean filter, HashMap extend) { Site home = ApiConfig.get().getHome(); - postResult(() -> { + postResult(Func.CATEGORY, () -> { Spider spider = ApiConfig.get().getCSP(home); String categoryContent = spider.categoryContent(tid, page, filter, extend); SpiderDebug.json(categoryContent); @@ -64,7 +64,7 @@ public class SiteViewModel extends ViewModel { public void detailContent(String id) { Site home = ApiConfig.get().getHome(); - postResult(() -> { + postResult(Func.DETAIL, () -> { Spider spider = ApiConfig.get().getCSP(home); String detailContent = spider.detailContent(List.of(id)); SpiderDebug.json(detailContent); @@ -74,7 +74,7 @@ public class SiteViewModel extends ViewModel { public void playerContent(String flag, String id) { Site home = ApiConfig.get().getHome(); - postResult(() -> { + postResult(Func.PLAYER, () -> { Spider spider = ApiConfig.get().getCSP(home); String playerContent = spider.playerContent(flag, id, ApiConfig.get().getFlags()); SpiderDebug.json(playerContent); @@ -82,15 +82,40 @@ public class SiteViewModel extends ViewModel { }); } - private void postResult(Callable callable) { + private void postResult(Func func, Callable callable) { mService.execute(() -> { try { Future future = mService.submit(callable); Result result = future.get(10, TimeUnit.SECONDS); + checkResult(func, result); mResult.postValue(result); } catch (Exception e) { mResult.postValue(new Result()); } }); } + + private void checkResult(Func func, Result result) { + if (func.equals(Func.DETAIL) && result.getList().size() > 0) { + Vod vod = result.getList().get(0); + vod.setVodFlags(getVodFlags(vod)); + } + } + + private List getVodFlags(Vod vod) { + List items = new ArrayList<>(); + String[] playFlags = vod.getVodPlayFrom().split("\\$\\$\\$"); + String[] playUrls = vod.getVodPlayUrl().split("\\$\\$\\$"); + for (int i = 0; i < playFlags.length; i++) { + Vod.Flag item = new Vod.Flag(playFlags[i]); + String[] urls = playUrls[i].contains("#") ? playUrls[i].split("#") : new String[]{playUrls[i]}; + for (String url : urls) { + if (!url.contains("$")) continue; + String[] split = url.split("\\$"); + if (split.length >= 2) item.getEpisodes().add(new Vod.Flag.Episode(split[0], split[1])); + } + items.add(item); + } + return items; + } } diff --git a/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java b/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java index 7e8955e11..38461d95d 100644 --- a/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java +++ b/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java @@ -24,8 +24,6 @@ import com.fongmi.bear.ui.presenter.EpisodePresenter; import com.fongmi.bear.ui.presenter.FlagPresenter; import com.fongmi.bear.utils.ResUtil; -import java.util.List; - public class DetailActivity extends BaseActivity { private ActivityDetailBinding mBinding; @@ -110,7 +108,8 @@ public class DetailActivity extends BaseActivity { setText(mBinding.content, R.string.detail_content, item.getVodContent()); setText(mBinding.director, R.string.detail_director, item.getVodDirector()); setText(mBinding.site, R.string.detail_site, ApiConfig.get().getHome().getName()); - setFlag(item.getVodFlags()); + mFlagAdapter.addAll(0, item.getVodFlags()); + setEpisode((Vod.Flag) mFlagAdapter.get(0)); } private void setText(TextView view, int resId, String text) { @@ -118,11 +117,6 @@ public class DetailActivity extends BaseActivity { else view.setText(ResUtil.getString(resId, text)); } - private void setFlag(List items) { - mFlagAdapter.addAll(0, items); - setEpisode((Vod.Flag) mFlagAdapter.get(0)); - } - private void setEpisode(Vod.Flag item) { mtEpisodeAdapter.clear(); mtEpisodeAdapter.addAll(0, item.getEpisodes()); diff --git a/app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java b/app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java index c4d1169ba..ccb6edee0 100644 --- a/app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java +++ b/app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java @@ -10,6 +10,7 @@ import androidx.leanback.widget.ListRow; import androidx.lifecycle.ViewModelProvider; import androidx.viewbinding.ViewBinding; +import com.fongmi.bear.ApiConfig; import com.fongmi.bear.R; import com.fongmi.bear.bean.Func; import com.fongmi.bear.bean.Result; @@ -89,7 +90,7 @@ public class HomeActivity extends BaseActivity implements VodPresenter.OnClickLi private void getVideo() { if (mAdapter.size() > 4) mAdapter.removeItems(4, mAdapter.size() - 4); - mSiteViewModel.homeContent(); + if (!ApiConfig.get().getHome().getKey().isEmpty()) mSiteViewModel.homeContent(); mAdapter.add("progress"); } diff --git a/app/src/main/java/com/fongmi/bear/ui/activity/VodActivity.java b/app/src/main/java/com/fongmi/bear/ui/activity/VodActivity.java index 8940e4325..01acf19c0 100644 --- a/app/src/main/java/com/fongmi/bear/ui/activity/VodActivity.java +++ b/app/src/main/java/com/fongmi/bear/ui/activity/VodActivity.java @@ -91,7 +91,7 @@ public class VodActivity extends BaseActivity { class PageAdapter extends FragmentStatePagerAdapter { public PageAdapter(@NonNull FragmentManager fm) { - super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + super(fm); } @NonNull diff --git a/app/src/main/java/com/fongmi/bear/ui/fragment/VodFragment.java b/app/src/main/java/com/fongmi/bear/ui/fragment/VodFragment.java index 767c6b5ed..a36b593ec 100644 --- a/app/src/main/java/com/fongmi/bear/ui/fragment/VodFragment.java +++ b/app/src/main/java/com/fongmi/bear/ui/fragment/VodFragment.java @@ -142,9 +142,8 @@ public class VodFragment extends Fragment implements Scroller.Callback, VodPrese } @Override - public void onResume() { - super.onResume(); - //TODO NEED FIX BUG - mBinding.recycler.moveToTop(); + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if (mBinding != null && !isVisibleToUser) mBinding.recycler.moveToTop(); } }