[leanback] support search pg

pull/137/head
FongMi 3 years ago
parent 99711d1f09
commit c44520a3f7
  1. 3
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CollectActivity.java
  2. 59
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java
  3. 23
      app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java
  4. 5
      pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java
  5. 5
      quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java

@ -189,7 +189,8 @@ public class CollectActivity extends BaseActivity {
@NonNull
@Override
public Fragment getItem(int position) {
return CollectFragment.newInstance(((Collect) mAdapter.get(position)).getList());
Collect collect = (Collect) mAdapter.get(position);
return CollectFragment.newInstance(getKeyword(), collect.getSite(), collect.getList());
}
@Override

@ -9,18 +9,21 @@ import androidx.annotation.Nullable;
import androidx.leanback.widget.ArrayObjectAdapter;
import androidx.leanback.widget.ItemBridgeAdapter;
import androidx.leanback.widget.ListRow;
import androidx.lifecycle.ViewModelProvider;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.Product;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.bean.Vod;
import com.fongmi.android.tv.databinding.FragmentVodBinding;
import com.fongmi.android.tv.model.SiteViewModel;
import com.fongmi.android.tv.ui.activity.DetailActivity;
import com.fongmi.android.tv.ui.activity.VodActivity;
import com.fongmi.android.tv.ui.base.BaseFragment;
import com.fongmi.android.tv.ui.custom.CustomRowPresenter;
import com.fongmi.android.tv.ui.custom.CustomScroller;
import com.fongmi.android.tv.ui.custom.CustomSelector;
import com.fongmi.android.tv.ui.presenter.VodPresenter;
import com.fongmi.android.tv.utils.ResUtil;
@ -29,22 +32,40 @@ import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.List;
public class CollectFragment extends BaseFragment implements VodPresenter.OnClickListener {
public class CollectFragment extends BaseFragment implements CustomScroller.Callback, VodPresenter.OnClickListener {
private FragmentVodBinding mBinding;
private ArrayObjectAdapter mAdapter;
private ArrayObjectAdapter mLast;
private String json;
private CustomScroller mScroller;
private SiteViewModel mViewModel;
private List<Vod> mItems;
private String mKeyword;
private Site mSite;
public static CollectFragment newInstance(String keyword, Site site, List<Vod> items) {
return new CollectFragment().setKeyword(keyword).setSite(site).setItems(items);
}
public static CollectFragment newInstance(List<Vod> items) {
return new CollectFragment().setJson(App.gson().toJson(items));
private CollectFragment setKeyword(String keyword) {
this.mKeyword = keyword;
return this;
}
private CollectFragment setJson(String json) {
this.json = json;
private CollectFragment setSite(Site site) {
this.mSite = site;
return this;
}
private CollectFragment setItems(List<Vod> items) {
this.mItems = items;
return this;
}
private boolean isAll() {
return mSite.getKey().equals("all");
}
@Override
protected ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
return mBinding = FragmentVodBinding.inflate(inflater, container, false);
@ -52,16 +73,32 @@ public class CollectFragment extends BaseFragment implements VodPresenter.OnClic
@Override
protected void initView() {
mScroller = new CustomScroller(this);
setRecyclerView();
setViewModel();
}
private void setRecyclerView() {
CustomSelector selector = new CustomSelector();
if (!isAll()) mBinding.recycler.addOnScrollListener(mScroller);
selector.addPresenter(ListRow.class, new CustomRowPresenter(16), VodPresenter.class);
mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(selector)));
mBinding.recycler.setHeader(getActivity().findViewById(R.id.result), getActivity().findViewById(R.id.recycler));
mBinding.recycler.setVerticalSpacing(ResUtil.dp2px(16));
}
private void setViewModel() {
mViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
mViewModel.search.observe(this, result -> {
int size = result.getList().size();
mScroller.endLoading(size == 0);
addVideo(result.getList());
});
}
@Override
protected void initData() {
addVideo(Vod.arrayFrom(json));
addVideo(mItems);
}
private boolean checkLastSize(List<Vod> items) {
@ -97,6 +134,12 @@ public class CollectFragment extends BaseFragment implements VodPresenter.OnClic
return false;
}
@Override
public void onLoadMore(String page) {
mViewModel.searchContent(mSite, mKeyword, page);
mScroller.setLoading(true);
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);

@ -201,6 +201,29 @@ public class SiteViewModel extends ViewModel {
}
}
public void searchContent(Site site, String keyword, String page) {
execute(search, () -> {
if (site.getType() == 3) {
Spider spider = ApiConfig.get().getCSP(site);
String searchContent = spider.searchContent(Trans.t2s(keyword), false, page);
SpiderDebug.log(site.getName() + "," + searchContent);
Result result = Result.fromJson(searchContent);
for (Vod vod : result.getList()) vod.setSite(site);
return result;
} else {
ArrayMap<String, String> params = new ArrayMap<>();
params.put("wd", Trans.t2s(keyword));
params.put("pg", page);
if (site.getType() != 0) params.put("ac", "detail");
String body = OkHttp.newCall(site.getApi(), params).execute().body().string();
SpiderDebug.log(site.getName() + "," + body);
Result result = site.getType() == 0 ? Result.fromXml(body) : Result.fromJson(body);
for (Vod vod : result.getList()) vod.setSite(site);
return fetchPic(site, result);
}
});
}
private Result fetchPic(Site site, Result result) throws Exception {
if (result.getList().isEmpty() || result.getList().get(0).getVodPic().length() > 0) return result;
ArrayList<String> ids = new ArrayList<>();

@ -66,6 +66,11 @@ public class Spider extends com.github.catvod.crawler.Spider {
return app.callAttr("searchContent", obj, key, quick).toString();
}
@Override
public String searchContent(String key, boolean quick, String pg) {
return app.callAttr("searchContent", obj, key, quick, pg).toString();
}
@Override
public String playerContent(String flag, String id, List<String> vipFlags) {
return app.callAttr("playerContent", obj, flag, id, gson.toJson(vipFlags)).toString();

@ -92,6 +92,11 @@ public class Spider extends com.github.catvod.crawler.Spider {
return (String) call("search", key, quick)[0];
}
@Override
public String searchContent(String key, boolean quick, String pg) throws Exception {
return (String) call("search", key, quick, pg)[0];
}
@Override
public String playerContent(String flag, String id, List<String> vipFlags) throws Exception {
JSArray array = submit(() -> JSUtil.toArray(ctx, vipFlags)).get();

Loading…
Cancel
Save