Fix some play bug

pull/21/head
FongMi 4 years ago
parent ccaa35ed34
commit 3e5f2919f8
  1. 7
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java
  3. 5
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
  4. 67
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  5. 28
      app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java
  6. 20
      app/src/main/java/com/fongmi/android/tv/player/Players.java

@ -171,12 +171,9 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
private void setViewModel() {
mSiteViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
mSiteViewModel.player.observe(this, object -> {
if (object != null) Players.get().setMediaSource(object);
});
mSiteViewModel.result.observe(this, result -> {
if (result == null) return;
if (result.getList().isEmpty()) mBinding.progressLayout.showErrorText();
if (result.getUrl().length() > 0) Players.get().setMediaSource(result);
else if (result.getList().isEmpty()) mBinding.progressLayout.showErrorText();
else setDetail(result.getList().get(0));
});
}

@ -40,7 +40,7 @@ public class VodActivity extends BaseActivity {
}
public static void start(Activity activity, Result result) {
if (result == null || result.getTypes().isEmpty()) return;
if (result.getTypes().isEmpty()) return;
Intent intent = new Intent(activity, VodActivity.class);
intent.putExtra("result", result.toString());
activity.startActivity(intent);

@ -1,7 +1,6 @@
package com.fongmi.android.tv.ui.fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -93,8 +92,8 @@ public class VodFragment extends Fragment implements CustomScroller.Callback, Vo
private void setViewModel() {
mSiteViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
mSiteViewModel.result.observe(getViewLifecycleOwner(), result -> {
mScroller.endLoading(result == null || result.getList().isEmpty());
if (result != null) addVideo(result);
mScroller.endLoading(result.getList().isEmpty());
if (result.getList().size() > 0) addVideo(result);
});
}

@ -1,5 +1,7 @@
package com.fongmi.android.tv.bean;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import com.google.gson.Gson;
@ -39,6 +41,19 @@ public class Result {
@SerializedName("filters")
private LinkedHashMap<String, List<Filter>> filters;
@SerializedName("playUrl")
private String playUrl;
@SerializedName("header")
private String header;
@SerializedName("parse")
private String parse;
@SerializedName("flag")
private String flag;
@SerializedName("jx")
private String jx;
@SerializedName("url")
private String url;
public static Result fromJson(String str) {
try {
Type type = new TypeToken<LinkedHashMap<String, List<Filter>>>() {}.getType();
@ -60,6 +75,10 @@ public class Result {
}
}
public static Result objectFrom(String str) {
return new Gson().fromJson(str, Result.class);
}
public List<Class> getTypes() {
return types == null ? Collections.emptyList() : types;
}
@ -80,6 +99,54 @@ public class Result {
return filters == null ? new LinkedHashMap<>() : filters;
}
public String getPlayUrl() {
return TextUtils.isEmpty(playUrl) ? "" : playUrl;
}
public void setPlayUrl(String playUrl) {
this.playUrl = playUrl;
}
public String getHeader() {
return TextUtils.isEmpty(header) ? "" : header;
}
public void setHeader(String header) {
this.header = header;
}
public String getParse() {
return TextUtils.isEmpty(parse) ? "1" : parse;
}
public void setParse(String parse) {
this.parse = parse;
}
public String getFlag() {
return TextUtils.isEmpty(flag) ? "" : flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
public String getJx() {
return TextUtils.isEmpty(jx) ? "0" : jx;
}
public void setJx(String jx) {
this.jx = jx;
}
public String getUrl() {
return TextUtils.isEmpty(url) ? "" : url;
}
public void setUrl(String url) {
this.url = url;
}
@NonNull
@Override
public String toString() {

@ -10,8 +10,6 @@ import com.fongmi.android.tv.net.OKHttp;
import com.fongmi.android.tv.utils.Utils;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderDebug;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.util.HashMap;
import java.util.List;
@ -24,13 +22,11 @@ import okhttp3.HttpUrl;
public class SiteViewModel extends ViewModel {
public MutableLiveData<JsonObject> player;
public MutableLiveData<Result> result;
public ExecutorService service;
public SiteViewModel() {
this.result = new MutableLiveData<>();
this.player = new MutableLiveData<>();
}
public MutableLiveData<Result> getResult() {
@ -105,33 +101,33 @@ public class SiteViewModel extends ViewModel {
public void playerContent(String key, String flag, String id) {
Site site = ApiConfig.get().getSite(key);
execute(player, () -> {
execute(result, () -> {
if (site.getType() == 3) {
Spider spider = ApiConfig.get().getCSP(site);
String playerContent = spider.playerContent(flag, id, ApiConfig.get().getFlags());
SpiderDebug.log(playerContent);
JsonObject object = JsonParser.parseString(playerContent).getAsJsonObject();
if (!object.has("flag")) object.addProperty("flag", flag);
return object;
Result result = Result.objectFrom(playerContent);
if (result.getFlag().isEmpty()) result.setFlag(flag);
return result;
} else {
JsonObject object = new JsonObject();
object.addProperty("url", id);
object.addProperty("flag", flag);
object.addProperty("playUrl", site.getPlayerUrl());
object.addProperty("parse", Utils.isVideoFormat(id) ? "0" : "1");
return object;
Result result = new Result();
result.setUrl(id);
result.setFlag(flag);
result.setPlayUrl(site.getPlayerUrl());
result.setParse(Utils.isVideoFormat(id) ? "0" : "1");
return result;
}
});
}
private <T> void execute(MutableLiveData<T> result, Callable<T> callable) {
private void execute(MutableLiveData<Result> result, Callable<Result> callable) {
if (service != null) service.shutdownNow();
service = Executors.newFixedThreadPool(2);
service.execute(() -> {
try {
if (!Thread.interrupted()) result.postValue(service.submit(callable).get(5, TimeUnit.SECONDS));
} catch (Exception e) {
if (!Thread.interrupted()) result.postValue(null);
if (!Thread.interrupted()) result.postValue(new Result());
e.printStackTrace();
}
});

@ -7,6 +7,7 @@ import androidx.annotation.NonNull;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.event.PlayerEvent;
import com.fongmi.android.tv.ui.custom.CustomWebView;
import com.fongmi.android.tv.utils.ResUtil;
@ -89,23 +90,20 @@ public class Players implements Player.Listener {
return exoPlayer.isPlaying();
}
public void setMediaSource(JsonObject object) {
String parse = object.get("parse").getAsString();
String url = object.get("url").getAsString();
if (parse.equals("1")) {
loadWebView(url);
public void setMediaSource(Result result) {
if (result.getParse().equals("1")) {
loadWebView(result.getUrl());
} else {
setMediaSource(getPlayHeader(object), url);
setMediaSource(getPlayHeader(result), result.getUrl());
}
}
private HashMap<String, String> getPlayHeader(JsonObject object) {
private HashMap<String, String> getPlayHeader(Result result) {
HashMap<String, String> headers = new HashMap<>();
if (!object.has("header")) return headers;
String header = object.get("header").getAsString();
JsonElement element = JsonParser.parseString(header);
if (result.getHeader().isEmpty()) return headers;
JsonElement element = JsonParser.parseString(result.getHeader());
if (element.isJsonObject()) {
object = element.getAsJsonObject();
JsonObject object = element.getAsJsonObject();
for (String key : object.keySet()) headers.put(key, object.get(key).getAsString());
}
return headers;

Loading…
Cancel
Save