Fix some bug

pull/3/head
FongMi 4 years ago
parent ffba2b2d94
commit 918bad05ce
  1. 27
      app/src/main/java/com/fongmi/bear/bean/Vod.java
  2. 67
      app/src/main/java/com/fongmi/bear/model/SiteViewModel.java
  3. 10
      app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java
  4. 3
      app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java
  5. 2
      app/src/main/java/com/fongmi/bear/ui/activity/VodActivity.java
  6. 7
      app/src/main/java/com/fongmi/bear/ui/fragment/VodFragment.java

@ -36,6 +36,8 @@ public class Vod {
@SerializedName("vod_play_url")
private String vodPlayUrl;
private List<Flag> 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<Flag> getVodFlags() {
return vodFlags;
}
public List<Flag> getVodFlags() {
List<Flag> 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<Flag> vodFlags) {
this.vodFlags = vodFlags;
}
public int getRemarkVisible() {
return getVodRemarks().isEmpty() ? View.GONE : View.VISIBLE;
}
public static class Flag {

@ -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<Result> 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<String, String> 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<Result> callable) {
private void postResult(Func func, Callable<Result> callable) {
mService.execute(() -> {
try {
Future<Result> 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<Vod.Flag> getVodFlags(Vod vod) {
List<Vod.Flag> 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;
}
}

@ -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<Vod.Flag> items) {
mFlagAdapter.addAll(0, items);
setEpisode((Vod.Flag) mFlagAdapter.get(0));
}
private void setEpisode(Vod.Flag item) {
mtEpisodeAdapter.clear();
mtEpisodeAdapter.addAll(0, item.getEpisodes());

@ -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");
}

@ -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

@ -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();
}
}

Loading…
Cancel
Save