Temp commit.

pull/1/head
SDL 4 years ago
parent 8c3c095810
commit c4b8908ba2
  1. 1
      app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java
  2. 1
      app/src/main/java/com/github/tvbox/osc/base/App.java
  3. 2
      app/src/main/java/com/github/tvbox/osc/bean/AbsJson.java
  4. 20
      app/src/main/java/com/github/tvbox/osc/bean/AbsSortJson.java
  5. 8
      app/src/main/java/com/github/tvbox/osc/bean/AbsSortXml.java
  6. 21
      app/src/main/java/com/github/tvbox/osc/bean/SourceBean.java
  7. 17
      app/src/main/java/com/github/tvbox/osc/ui/activity/CollectActivity.java
  8. 31
      app/src/main/java/com/github/tvbox/osc/ui/activity/HomeActivity.java
  9. 8
      app/src/main/java/com/github/tvbox/osc/ui/activity/SettingActivity.java
  10. 24
      app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java
  11. 57
      app/src/main/java/com/github/tvbox/osc/ui/fragment/UserFragment.java
  12. 24
      app/src/main/java/com/github/tvbox/osc/util/DefaultConfig.java
  13. 1
      app/src/main/java/com/github/tvbox/osc/util/HawkConfig.java
  14. 9
      app/src/main/java/com/github/tvbox/osc/util/OkGoHelper.java
  15. 162
      app/src/main/java/com/github/tvbox/osc/viewmodel/SourceViewModel.java
  16. 94
      app/src/main/res/layout/fragment_model.xml

@ -241,6 +241,7 @@ public class ApiConfig {
sb.setFilterable(DefaultConfig.safeJsonInt(obj, "filterable", 1));
sb.setPlayerUrl(DefaultConfig.safeJsonString(obj, "playUrl", ""));
sb.setExt(DefaultConfig.safeJsonString(obj, "ext", ""));
sb.setCategories(DefaultConfig.safeJsonStringList(obj, "categories"));
if (firstSite == null)
firstSite = sb;
sourceBeanList.put(siteKey, sb);

@ -52,6 +52,7 @@ public class App extends MultiDexApplication {
if (!Hawk.contains(HawkConfig.PLAY_TYPE)) {
Hawk.put(HawkConfig.PLAY_TYPE, 1);
}
Hawk.put(HawkConfig.HOME_REC, 2);
}
public static App getInstance() {

@ -126,7 +126,7 @@ public class AbsJson implements Serializable {
video.actor = vod_actor;
video.director = vod_director;
Movie.Video.UrlBean urlBean = new Movie.Video.UrlBean();
if(vod_play_from != null) {
if (vod_play_from != null && vod_play_url != null) {
String[] playFlags = vod_play_from.split("\\$\\$\\$");
String[] playUrls = vod_play_url.split("\\$\\$\\$");
List<Movie.Video.UrlBean.UrlInfo> infoList = new ArrayList<>();

@ -8,19 +8,33 @@ import java.util.ArrayList;
public class AbsSortJson implements Serializable {
@SerializedName(value = "class")
public ArrayList<AbsJsonClass> classList;
public ArrayList<AbsJsonClass> classes;
@SerializedName(value = "list")
public ArrayList<AbsJson.AbsJsonVod> list;
public AbsSortXml toAbsSortXml() {
AbsSortXml absSortXml = new AbsSortXml();
MovieSort movieSort = new MovieSort();
movieSort.sortList = new ArrayList<>();
for (AbsJsonClass cls : classList) {
for (AbsJsonClass cls : classes) {
MovieSort.SortData sortData = new MovieSort.SortData();
sortData.id = cls.type_id;
sortData.name = cls.type_name;
movieSort.sortList.add(sortData);
}
absSortXml.movieSort = movieSort;
if (list != null && !list.isEmpty()) {
Movie movie = new Movie();
ArrayList<Movie.Video> videos = new ArrayList<>();
for (AbsJson.AbsJsonVod vod : list) {
videos.add(vod.toXmlVideo());
}
movie.videoList = videos;
absSortXml.list = movie;
} else {
absSortXml.list = null;
}
absSortXml.classes = movieSort;
return absSortXml;
}

@ -3,6 +3,7 @@ package com.github.tvbox.osc.bean;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import java.io.Serializable;
import java.util.List;
/**
* @author pj567
@ -12,5 +13,10 @@ import java.io.Serializable;
@XStreamAlias("rss")
public class AbsSortXml implements Serializable {
@XStreamAlias("class")
public MovieSort movieSort;
public MovieSort classes;
@XStreamAlias("list")
public Movie list;
public List<Movie.Video> videoList;
}

@ -1,16 +1,8 @@
package com.github.tvbox.osc.bean;
/**
* @author pj567
* @date :2020/12/18
* @description:
*/
import java.util.ArrayList;
public class SourceBean {
/**
* name : 最大资源网
* api : http://www.zdziyuan.com/inc/api.php
* download : http://www.zdziyuan.com/inc/apidown.php
*/
private String key;
private String name;
private String api;
@ -20,6 +12,7 @@ public class SourceBean {
private int filterable; // 可筛选?
private String playerUrl; // 站点解析Url
private String ext; // 扩展数据
private ArrayList<String> categories = null; // 分类&排序
public String getKey() {
return key;
@ -92,4 +85,12 @@ public class SourceBean {
public void setExt(String ext) {
this.ext = ext;
}
public ArrayList<String> getCategories() {
return categories;
}
public void setCategories(ArrayList<String> categories) {
this.categories = categories;
}
}

@ -2,12 +2,14 @@ package com.github.tvbox.osc.ui.activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.animation.BounceInterpolator;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.github.tvbox.osc.R;
import com.github.tvbox.osc.api.ApiConfig;
import com.github.tvbox.osc.base.BaseActivity;
import com.github.tvbox.osc.cache.RoomDataManger;
import com.github.tvbox.osc.cache.VodCollect;
@ -99,10 +101,17 @@ public class CollectActivity extends BaseActivity {
collectAdapter.remove(position);
RoomDataManger.deleteVodCollect(vodInfo.getId());
} else {
Intent newIntent = new Intent(mContext, SearchActivity.class);
newIntent.putExtra("title", vodInfo.name);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(newIntent);
if (ApiConfig.get().getSource(vodInfo.sourceKey) != null) {
Bundle bundle = new Bundle();
bundle.putString("id", vodInfo.vodId);
bundle.putString("sourceKey", vodInfo.sourceKey);
jumpActivity(DetailActivity.class, bundle);
} else {
Intent newIntent = new Intent(mContext, SearchActivity.class);
newIntent.putExtra("title", vodInfo.name);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(newIntent);
}
}
}
}

@ -27,7 +27,10 @@ import com.github.tvbox.osc.api.ApiConfig;
import com.github.tvbox.osc.base.BaseActivity;
import com.github.tvbox.osc.base.BaseLazyFragment;
import com.github.tvbox.osc.bean.AbsSortXml;
import com.github.tvbox.osc.bean.Movie;
import com.github.tvbox.osc.bean.MovieSort;
import com.github.tvbox.osc.bean.VodInfo;
import com.github.tvbox.osc.cache.RoomDataManger;
import com.github.tvbox.osc.event.RefreshEvent;
import com.github.tvbox.osc.server.ControlManager;
import com.github.tvbox.osc.ui.adapter.HomePageAdapter;
@ -41,8 +44,10 @@ import com.github.tvbox.osc.ui.tv.widget.NoScrollViewPager;
import com.github.tvbox.osc.ui.tv.widget.ViewObj;
import com.github.tvbox.osc.util.AppManager;
import com.github.tvbox.osc.util.DefaultConfig;
import com.github.tvbox.osc.util.HawkConfig;
import com.github.tvbox.osc.util.LOG;
import com.github.tvbox.osc.viewmodel.SourceViewModel;
import com.orhanobut.hawk.Hawk;
import com.owen.tvrecyclerview.widget.TvRecyclerView;
import com.owen.tvrecyclerview.widget.V7LinearLayoutManager;
@ -185,12 +190,12 @@ public class HomeActivity extends BaseActivity {
@Override
public void onChanged(AbsSortXml absXml) {
showSuccess();
if (absXml != null && absXml.movieSort != null && absXml.movieSort.sortList != null) {
sortAdapter.setNewData(DefaultConfig.adjustSort(ApiConfig.get().getHomeSourceBean().getKey(), absXml.movieSort.sortList, true));
if (absXml != null && absXml.classes != null && absXml.classes.sortList != null) {
sortAdapter.setNewData(DefaultConfig.adjustSort(ApiConfig.get().getHomeSourceBean().getKey(), absXml.classes.sortList, true));
} else {
sortAdapter.setNewData(DefaultConfig.adjustSort(ApiConfig.get().getHomeSourceBean().getKey(), new ArrayList<>(), true));
}
initViewPager();
initViewPager(absXml);
}
});
}
@ -336,11 +341,27 @@ public class HomeActivity extends BaseActivity {
}, this);
}
private void initViewPager() {
private void initViewPager(AbsSortXml absXml) {
if (sortAdapter.getData().size() > 0) {
for (MovieSort.SortData data : sortAdapter.getData()) {
if (data.id.equals("my0")) {
fragments.add(UserFragment.newInstance());
if (Hawk.get(HawkConfig.HOME_REC, 0) == 1 && absXml.videoList != null && absXml.videoList.size() > 0) {
fragments.add(UserFragment.newInstance(absXml.videoList));
} else if (Hawk.get(HawkConfig.HOME_REC, 0) == 2) {
List<VodInfo> allVodRecord = RoomDataManger.getAllVodRecord();
List<Movie.Video> vodList = new ArrayList<>();
for (VodInfo vodInfo : allVodRecord) {
Movie.Video vod = new Movie.Video();
vod.id = vodInfo.id;
vod.sourceKey = vodInfo.sourceKey;
vod.name = vodInfo.name;
vod.note = "上次看到" + vodInfo.playIndex;
vodList.add(vod);
}
fragments.add(UserFragment.newInstance(vodList));
} else {
fragments.add(UserFragment.newInstance(null));
}
} else {
fragments.add(GridFragment.newInstance(data));
}

@ -44,6 +44,8 @@ public class SettingActivity extends BaseActivity {
private Handler mHandler = new Handler();
private String homeSourceKey;
private String currentApi;
private int homeRec;
private int dnsOpt;
@Override
protected int getLayoutResID() {
@ -106,6 +108,8 @@ public class SettingActivity extends BaseActivity {
private void initData() {
currentApi = Hawk.get(HawkConfig.API_URL, "");
homeSourceKey = ApiConfig.get().getHomeSourceBean().getKey();
homeRec = Hawk.get(HawkConfig.HOME_REC, 0);
dnsOpt = Hawk.get(HawkConfig.DOH_URL, 0);
List<String> sortList = new ArrayList<>();
sortList.add("设置其他");
sortAdapter.setNewData(sortList);
@ -174,7 +178,9 @@ public class SettingActivity extends BaseActivity {
@Override
public void onBackPressed() {
if ((homeSourceKey != null && !homeSourceKey.equals(Hawk.get(HawkConfig.HOME_API, ""))) ||
!currentApi.equals(Hawk.get(HawkConfig.API_URL, ""))) {
!currentApi.equals(Hawk.get(HawkConfig.API_URL, "")) ||
homeRec != Hawk.get(HawkConfig.HOME_REC, 0) ||
dnsOpt != Hawk.get(HawkConfig.DOH_URL, 0)) {
AppManager.getInstance().finishAllActivity();
if (currentApi.equals(Hawk.get(HawkConfig.API_URL, ""))) {
Bundle bundle = new Bundle();

@ -8,6 +8,7 @@ import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.github.tvbox.osc.R;
import com.github.tvbox.osc.bean.Movie;
import com.github.tvbox.osc.picasso.RoundTransformation;
import com.github.tvbox.osc.util.DefaultConfig;
import com.github.tvbox.osc.util.MD5;
@ -17,34 +18,19 @@ import java.util.ArrayList;
import me.jessyan.autosize.utils.AutoSizeUtils;
public class HomeHotVodAdapter extends BaseQuickAdapter<HomeHotVodAdapter.HotVod, BaseViewHolder> {
public static class HotVod {
String name;
String rate;
String pic;
public HotVod(String name, String rate, String pic) {
this.name = name;
this.rate = rate;
this.pic = pic;
}
public String getName() {
return name;
}
}
public class HomeHotVodAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHolder> {
public HomeHotVodAdapter() {
super(R.layout.item_user_hot_vod, new ArrayList<>());
}
@Override
protected void convert(BaseViewHolder helper, HotVod item) {
protected void convert(BaseViewHolder helper, Movie.Video item) {
TextView tvRate = helper.getView(R.id.tvRate);
if (item.rate == null || item.rate.isEmpty()) {
if (item.note == null || item.note.isEmpty()) {
tvRate.setVisibility(View.GONE);
} else {
tvRate.setText(item.rate);
tvRate.setText(item.note);
}
helper.setText(R.id.tvName, item.name);
ImageView ivThumb = helper.getView(R.id.ivThumb);

@ -1,6 +1,7 @@
package com.github.tvbox.osc.ui.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.animation.BounceInterpolator;
import android.widget.LinearLayout;
@ -9,8 +10,10 @@ import com.chad.library.adapter.base.BaseQuickAdapter;
import com.github.tvbox.osc.R;
import com.github.tvbox.osc.api.ApiConfig;
import com.github.tvbox.osc.base.BaseLazyFragment;
import com.github.tvbox.osc.bean.Movie;
import com.github.tvbox.osc.event.ServerEvent;
import com.github.tvbox.osc.ui.activity.CollectActivity;
import com.github.tvbox.osc.ui.activity.DetailActivity;
import com.github.tvbox.osc.ui.activity.HistoryActivity;
import com.github.tvbox.osc.ui.activity.LivePlayActivity;
import com.github.tvbox.osc.ui.activity.PushActivity;
@ -18,6 +21,7 @@ import com.github.tvbox.osc.ui.activity.SearchActivity;
import com.github.tvbox.osc.ui.activity.SettingActivity;
import com.github.tvbox.osc.ui.adapter.HomeHotVodAdapter;
import com.github.tvbox.osc.util.FastClickCheckUtil;
import com.github.tvbox.osc.util.HawkConfig;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
@ -34,6 +38,7 @@ import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
/**
* @author pj567
@ -47,11 +52,22 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen
private LinearLayout tvHistory;
private LinearLayout tvCollect;
private LinearLayout tvPush;
private HomeHotVodAdapter homeHotVodAdapter;
private List<Movie.Video> recVod;
public static UserFragment newInstance() {
return new UserFragment();
}
public static UserFragment newInstance(List<Movie.Video> recVod) {
return new UserFragment().setArguments(recVod);
}
public UserFragment setArguments(List<Movie.Video> recVod) {
this.recVod = recVod;
return this;
}
@Override
protected int getLayoutResID() {
return R.layout.fragment_user;
@ -79,17 +95,24 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen
tvPush.setOnFocusChangeListener(focusChangeListener);
tvCollect.setOnFocusChangeListener(focusChangeListener);
TvRecyclerView tvHotList = findViewById(R.id.tvHotList);
HomeHotVodAdapter adapter = new HomeHotVodAdapter();
adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
homeHotVodAdapter = new HomeHotVodAdapter();
homeHotVodAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
if (ApiConfig.get().getSourceBeanList().isEmpty())
return;
String title = ((HomeHotVodAdapter.HotVod) adapter.getItem(position)).getName();
Intent newIntent = new Intent(mContext, SearchActivity.class);
newIntent.putExtra("title", title);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
mActivity.startActivity(newIntent);
Movie.Video vod = ((Movie.Video) adapter.getItem(position));
if (vod.id != null && !vod.id.isEmpty()) {
Bundle bundle = new Bundle();
bundle.putString("id", vod.id);
bundle.putString("sourceKey", vod.sourceKey);
jumpActivity(DetailActivity.class, bundle);
} else {
Intent newIntent = new Intent(mContext, SearchActivity.class);
newIntent.putExtra("title", vod.name);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
mActivity.startActivity(newIntent);
}
}
});
tvHotList.setOnItemListener(new TvRecyclerView.OnItemListener() {
@ -108,12 +131,18 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen
}
});
tvHotList.setAdapter(adapter);
tvHotList.setAdapter(homeHotVodAdapter);
initHomeHotVod(adapter);
initHomeHotVod(homeHotVodAdapter);
}
private void initHomeHotVod(HomeHotVodAdapter adapter) {
if (Hawk.get(HawkConfig.HOME_REC, 0) != 0) {
if (recVod != null) {
adapter.setNewData(recVod);
}
return;
}
try {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
@ -152,14 +181,18 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen
}
}
private ArrayList<HomeHotVodAdapter.HotVod> loadHots(String json) {
ArrayList<HomeHotVodAdapter.HotVod> result = new ArrayList<>();
private ArrayList<Movie.Video> loadHots(String json) {
ArrayList<Movie.Video> result = new ArrayList<>();
try {
JsonObject infoJson = new Gson().fromJson(json, JsonObject.class);
JsonArray array = infoJson.getAsJsonArray("data");
for (JsonElement ele : array) {
JsonObject obj = (JsonObject) ele;
result.add(new HomeHotVodAdapter.HotVod(obj.get("title").getAsString(), obj.get("rate").getAsString(), obj.get("cover").getAsString()));
Movie.Video vod = new Movie.Video();
vod.name = obj.get("title").getAsString();
vod.note = obj.get("rate").getAsString();
vod.pic = obj.get("cover").getAsString();
result.add(vod);
}
} catch (Throwable th) {

@ -5,7 +5,9 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.text.TextUtils;
import com.github.tvbox.osc.api.ApiConfig;
import com.github.tvbox.osc.bean.MovieSort;
import com.github.tvbox.osc.bean.SourceBean;
import com.github.tvbox.osc.server.ControlManager;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@ -25,10 +27,24 @@ public class DefaultConfig {
public static List<MovieSort.SortData> adjustSort(String sourceKey, List<MovieSort.SortData> list, boolean withMy) {
List<MovieSort.SortData> data = new ArrayList<>();
if (sourceKey != null) {
for (MovieSort.SortData sortData : list) {
if (sortData.filters == null)
sortData.filters = new ArrayList<>();
data.add(sortData);
SourceBean sb = ApiConfig.get().getSource(sourceKey);
ArrayList<String> categories = sb.getCategories();
if (!categories.isEmpty()) {
for (String cate : categories) {
for (MovieSort.SortData sortData : list) {
if (sortData.name.equals(cate)) {
if (sortData.filters == null)
sortData.filters = new ArrayList<>();
data.add(sortData);
}
}
}
} else {
for (MovieSort.SortData sortData : list) {
if (sortData.filters == null)
sortData.filters = new ArrayList<>();
data.add(sortData);
}
}
}
if (withMy)

@ -19,4 +19,5 @@ public class HawkConfig {
public static final String PLAY_SCALE = "play_scale"; //0 texture 2
public static final String PLAY_TIME_STEP = "play_time_step"; //0 texture 2
public static final String DOH_URL = "doh_url";
public static final String HOME_REC = "home_rec"; // 0 豆瓣热播 1 数据源推荐 2 历史
}

@ -6,6 +6,8 @@ import com.lzy.okgo.OkGo;
import com.lzy.okgo.https.HttpsUtils;
import com.lzy.okgo.interceptor.HttpLoggingInterceptor;
import com.orhanobut.hawk.Hawk;
import com.squareup.picasso.OkHttp3Downloader;
import com.squareup.picasso.Picasso;
import java.io.File;
import java.security.cert.CertificateException;
@ -133,6 +135,13 @@ public class OkGoHelper {
OkGo.getInstance().setRetryCount(2);
initExoOkHttpClient();
initPicasso(okHttpClient);
}
static void initPicasso(OkHttpClient client) {
OkHttp3Downloader downloader = new OkHttp3Downloader(client);
Picasso picasso = new Picasso.Builder(App.getInstance()).downloader(downloader).build();
Picasso.setSingletonInstance(picasso);
}
private static synchronized void setOkHttpSsl(OkHttpClient.Builder builder) {

@ -1,5 +1,7 @@
package com.github.tvbox.osc.viewmodel;
import android.text.TextUtils;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
@ -14,6 +16,7 @@ import com.github.tvbox.osc.bean.MovieSort;
import com.github.tvbox.osc.bean.SourceBean;
import com.github.tvbox.osc.event.RefreshEvent;
import com.github.tvbox.osc.util.DefaultConfig;
import com.github.tvbox.osc.util.HawkConfig;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
@ -23,6 +26,7 @@ import com.google.gson.reflect.TypeToken;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.AbsCallback;
import com.lzy.okgo.model.Response;
import com.orhanobut.hawk.Hawk;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
@ -93,7 +97,18 @@ public class SourceViewModel extends ViewModel {
e.printStackTrace();
} finally {
if (sortJson != null) {
sortJson(sortResult, sortJson);
AbsSortXml sortXml = sortJson(sortResult, sortJson);
if (sortXml != null && Hawk.get(HawkConfig.HOME_REC, 0) == 1) {
getHomeRecList(sourceBean, null, new HomeRecCallback() {
@Override
public void done(List<Movie.Video> videos) {
sortXml.videoList = videos;
sortResult.postValue(sortXml);
}
});
} else {
sortResult.postValue(sortXml);
}
} else {
sortResult.postValue(null);
}
@ -121,12 +136,29 @@ public class SourceViewModel extends ViewModel {
@Override
public void onSuccess(Response<String> response) {
AbsSortXml sortXml = null;
if (type == 0) {
String xml = response.body();
sortXml(sortResult, xml);
sortXml = sortXml(sortResult, xml);
} else if (type == 1) {
String json = response.body();
sortJson(sortResult, json);
sortXml = sortJson(sortResult, json);
}
if (sortXml != null && Hawk.get(HawkConfig.HOME_REC, 0) == 1 && sortXml.list != null && sortXml.list.videoList != null && sortXml.list.videoList.size() > 0) {
ArrayList<String> ids = new ArrayList<>();
for (Movie.Video vod : sortXml.list.videoList) {
ids.add(vod.id);
}
AbsSortXml finalSortXml = sortXml;
getHomeRecList(sourceBean, ids, new HomeRecCallback() {
@Override
public void done(List<Movie.Video> videos) {
finalSortXml.videoList = videos;
sortResult.postValue(finalSortXml);
}
});
} else {
sortResult.postValue(sortXml);
}
}
@ -195,6 +227,95 @@ public class SourceViewModel extends ViewModel {
}
}
interface HomeRecCallback {
void done(List<Movie.Video> videos);
}
void getHomeRecList(SourceBean sourceBean, ArrayList<String> ids, HomeRecCallback callback) {
if (sourceBean.getType() == 3) {
Runnable waitResponse = new Runnable() {
@Override
public void run() {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new Callable<String>() {
@Override
public String call() throws Exception {
Spider sp = ApiConfig.get().getCSP(sourceBean);
return sp.homeVideoContent();
}
});
String sortJson = null;
try {
sortJson = future.get(15, TimeUnit.SECONDS);
} catch (TimeoutException e) {
e.printStackTrace();
future.cancel(true);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
} finally {
if (sortJson != null) {
AbsXml absXml = json(null, sortJson, sourceBean.getKey());
if (absXml != null && absXml.movie != null && absXml.movie.videoList != null) {
callback.done(absXml.movie.videoList);
} else {
callback.done(null);
}
} else {
callback.done(null);
}
try {
executor.shutdown();
} catch (Throwable th) {
th.printStackTrace();
}
}
}
};
spThreadPool.execute(waitResponse);
} else if (sourceBean.getType() == 0 || sourceBean.getType() == 1) {
OkGo.<String>get(sourceBean.getApi())
.tag("detail")
.params("ac", sourceBean.getType() == 0 ? "videolist" : "detail")
.params("ids", TextUtils.join(",", ids))
.execute(new AbsCallback<String>() {
@Override
public String convertResponse(okhttp3.Response response) throws Throwable {
if (response.body() != null) {
return response.body().string();
} else {
throw new IllegalStateException("网络请求错误");
}
}
@Override
public void onSuccess(Response<String> response) {
AbsXml absXml;
if (sourceBean.getType() == 0) {
String xml = response.body();
absXml = xml(null, xml, sourceBean.getKey());
} else {
String json = response.body();
absXml = json(null, json, sourceBean.getKey());
}
if (absXml != null && absXml.movie != null && absXml.movie.videoList != null) {
callback.done(absXml.movie.videoList);
} else {
callback.done(null);
}
}
@Override
public void onError(Response<String> response) {
super.onError(response);
callback.done(null);
}
});
} else {
callback.done(null);
}
}
public void getDetail(String sourceKey, String id) {
SourceBean sourceBean = ApiConfig.get().getSource(sourceKey);
int type = sourceBean.getType();
@ -407,7 +528,7 @@ public class SourceViewModel extends ViewModel {
return filter;
}
private void sortJson(MutableLiveData<AbsSortXml> result, String json) {
private AbsSortXml sortJson(MutableLiveData<AbsSortXml> result, String json) {
try {
JsonObject obj = JsonParser.parseString(json).getAsJsonObject();
AbsSortJson sortJson = new Gson().fromJson(obj, new TypeToken<AbsSortJson>() {
@ -429,7 +550,7 @@ public class SourceViewModel extends ViewModel {
}
sortFilters.put(key, sortFilter);
}
for (MovieSort.SortData sort : data.movieSort.sortList) {
for (MovieSort.SortData sort : data.classes.sortList) {
if (sortFilters.containsKey(sort.id) && sortFilters.get(sort.id) != null) {
sort.filters = sortFilters.get(sort.id);
}
@ -438,22 +559,27 @@ public class SourceViewModel extends ViewModel {
} catch (Throwable th) {
}
result.postValue(data);
return data;
} catch (Exception e) {
result.postValue(null);
return null;
}
}
private void sortXml(MutableLiveData<AbsSortXml> result, String xml) {
private AbsSortXml sortXml(MutableLiveData<AbsSortXml> result, String xml) {
try {
XStream xstream = new XStream(new DomDriver());//创建Xstram对象
xstream.autodetectAnnotations(true);
xstream.processAnnotations(AbsSortXml.class);
xstream.ignoreUnknownElements();
AbsSortXml data = (AbsSortXml) xstream.fromXML(xml);
result.postValue(data);
for (MovieSort.SortData sort : data.classes.sortList) {
if (sort.filters == null) {
sort.filters = new ArrayList<>();
}
}
return data;
} catch (Exception e) {
result.postValue(null);
return null;
}
}
@ -486,7 +612,7 @@ public class SourceViewModel extends ViewModel {
}
}
private void xml(MutableLiveData<AbsXml> result, String xml, String sourceKey) {
private AbsXml xml(MutableLiveData<AbsXml> result, String xml, String sourceKey) {
try {
XStream xstream = new XStream(new DomDriver());//创建Xstram对象
xstream.autodetectAnnotations(true);
@ -504,21 +630,23 @@ public class SourceViewModel extends ViewModel {
EventBus.getDefault().post(new RefreshEvent(RefreshEvent.TYPE_SEARCH_RESULT, data));
} else if (quickSearchResult == result) {
EventBus.getDefault().post(new RefreshEvent(RefreshEvent.TYPE_QUICK_SEARCH_RESULT, data));
} else {
} else if (result != null) {
result.postValue(data);
}
return data;
} catch (Exception e) {
if (searchResult == result) {
EventBus.getDefault().post(new RefreshEvent(RefreshEvent.TYPE_SEARCH_RESULT, null));
} else if (quickSearchResult == result) {
EventBus.getDefault().post(new RefreshEvent(RefreshEvent.TYPE_QUICK_SEARCH_RESULT, null));
} else {
} else if (result != null) {
result.postValue(null);
}
return null;
}
}
private void json(MutableLiveData<AbsXml> result, String json, String sourceKey) {
private AbsXml json(MutableLiveData<AbsXml> result, String json, String sourceKey) {
try {
AbsJson absJson = new Gson().fromJson(json, new TypeToken<AbsJson>() {
}.getType());
@ -528,17 +656,19 @@ public class SourceViewModel extends ViewModel {
EventBus.getDefault().post(new RefreshEvent(RefreshEvent.TYPE_SEARCH_RESULT, data));
} else if (quickSearchResult == result) {
EventBus.getDefault().post(new RefreshEvent(RefreshEvent.TYPE_QUICK_SEARCH_RESULT, data));
} else {
} else if (result != null) {
result.postValue(data);
}
return data;
} catch (Exception e) {
if (searchResult == result) {
EventBus.getDefault().post(new RefreshEvent(RefreshEvent.TYPE_SEARCH_RESULT, null));
} else if (quickSearchResult == result) {
EventBus.getDefault().post(new RefreshEvent(RefreshEvent.TYPE_QUICK_SEARCH_RESULT, null));
} else {
} else if (result != null) {
result.postValue(null);
}
return null;
}
}

@ -152,6 +152,100 @@
android:textSize="@dimen/ts_30" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/vs_60"
android:layout_marginBottom="@dimen/vs_10"
android:focusable="false"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/llHomeRec"
android:layout_width="@dimen/vs_0"
android:layout_height="match_parent"
android:layout_marginEnd="@dimen/vs_5"
android:layout_marginRight="@dimen/vs_5"
android:layout_weight="1"
android:background="@drawable/shape_setting_model_focus"
android:focusable="true"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingLeft="@dimen/vs_20"
android:paddingRight="@dimen/vs_20">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="首页推荐"
android:textColor="@android:color/white"
android:textSize="@dimen/ts_24" />
<Space
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/tvHomeRec"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:textSize="@dimen/ts_24" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/vs_10"
android:layout_marginLeft="@dimen/vs_10"
android:text=">"
android:textColor="@android:color/white"
android:textSize="@dimen/ts_30" />
</LinearLayout>
<LinearLayout
android:id="@+id/llSearchView"
android:layout_width="@dimen/vs_0"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/vs_5"
android:layout_marginLeft="@dimen/vs_5"
android:layout_weight="1"
android:background="@drawable/shape_setting_model_focus"
android:focusable="true"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingLeft="@dimen/vs_20"
android:paddingRight="@dimen/vs_20">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="搜索展示"
android:textColor="@android:color/white"
android:textSize="@dimen/ts_24" />
<Space
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/tvSearchView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:textSize="@dimen/ts_24" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/vs_10"
android:layout_marginLeft="@dimen/vs_10"
android:text=">"
android:textColor="@android:color/white"
android:textSize="@dimen/ts_30" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/vs_60"

Loading…
Cancel
Save