Skip to content

Commit

Permalink
Merge pull request FongMi#569 from okcaptain/release
Browse files Browse the repository at this point in the history
Merge dev
  • Loading branch information
okcaptain authored Aug 17, 2024
2 parents 3d47905 + d846524 commit fe829dd
Show file tree
Hide file tree
Showing 31 changed files with 253 additions and 153 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,12 @@ http://127.0.0.1:9978/action?do=refresh&type=detail
http://127.0.0.1:9978/action?do=refresh&type=player
```

刷新直播

```
http://127.0.0.1:9978/action?do=refresh&type=live
```

推送字幕

```
Expand Down
6 changes: 3 additions & 3 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ android {
minSdk 21
//noinspection ExpiredTargetSdkVersion
targetSdk 28
versionCode 246
versionName "2.4.6"
versionCode 247
versionName "2.4.7"
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
Expand Down Expand Up @@ -119,6 +119,7 @@ dependencies {
implementation 'androidx.room:room-runtime:2.6.1'
implementation 'androidx.media:media:1.7.0'
implementation 'cat.ereza:customactivityoncrash:2.4.0'
implementation('com.github.anilbeesetti.nextlib:nextlib-media3ext:0.8.2') { exclude group: 'androidx.media3', module: 'media3-exoplayer' }
implementation 'com.github.bassaer:materialdesigncolors:1.0.0'
implementation 'com.github.bumptech.glide:glide:4.16.0'
implementation 'com.github.bumptech.glide:annotations:4.16.0'
Expand Down Expand Up @@ -146,7 +147,6 @@ dependencies {
implementation(ext: 'aar', name: 'dlna-core-release', group: 'fongmi', version: 'release')
implementation(ext: 'aar', name: 'dlna-dmc-release', group: 'fongmi', version: 'release')
implementation(ext: 'aar', name: 'dlna-dmr-release', group: 'fongmi', version: 'release')
implementation(ext: 'aar', name: 'media3ext-release', group: 'fongmi', version: 'release')
leanbackImplementation 'androidx.leanback:leanback:1.2.0-alpha04'
leanbackImplementation 'com.github.hedzr:android-file-chooser:v1.2.0-final'
leanbackImplementation 'me.jessyan:autosize:1.2.1'
Expand Down
Binary file removed app/libs/media3ext-release.aar
Binary file not shown.
Binary file removed app/libs/quickjs.aar
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.graphics.drawable.Drawable;
import android.os.IBinder;
import android.view.KeyEvent;
import android.view.View;
Expand Down Expand Up @@ -75,6 +76,11 @@ private IjkVideoView getIjk() {
return mBinding.ijk;
}

private Drawable getDefaultArtwork() {
if (mPlayers.isExo()) return getExo().getDefaultArtwork();
return getIjk().getDefaultArtwork();
}

@Override
protected ViewBinding getBinding() {
return mBinding = ActivityCastBinding.inflate(getLayoutInflater());
Expand Down Expand Up @@ -359,7 +365,7 @@ private void setTrackVisible(boolean visible) {
}

private void setMetadata() {
mPlayers.setMetadata(mBinding.widget.title.getText().toString(), "", "");
mPlayers.setMetadata(mBinding.widget.title.getText().toString(), "", "", getDefaultArtwork());
}

@Subscribe(threadMode = ThreadMode.MAIN)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -476,7 +476,7 @@ public void setLoading(boolean loading) {
}

private void setLogo() {
Glide.with(this).load(UrlUtil.convert(VodConfig.get().getConfig().getLogo())).circleCrop().override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).listener(getListener()).into(mBinding.logo);
Glide.with(App.get()).load(UrlUtil.convert(VodConfig.get().getConfig().getLogo())).circleCrop().override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).listener(getListener()).into(mBinding.logo);
}

private RequestListener<Drawable> getListener() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,11 @@ private IjkVideoView getIjk() {
return mBinding.ijk;
}

private Drawable getDefaultArtwork() {
if (mPlayers.isExo()) return getExo().getDefaultArtwork();
return getIjk().getDefaultArtwork();
}

private Group getKeep() {
return (Group) mGroupAdapter.get(0);
}
Expand Down Expand Up @@ -713,6 +718,7 @@ public void onTimeChanged() {

@Override
public void setLive(Live item) {
if (item.isActivated()) item.getGroups().clear();
LiveConfig.get().setHome(item);
mPlayers.reset();
mPlayers.stop();
Expand Down Expand Up @@ -754,6 +760,18 @@ public void onActionEvent(ActionEvent event) {
}
}

@Subscribe(threadMode = ThreadMode.MAIN)
public void onRefreshEvent(RefreshEvent event) {
switch (event.getType()) {
case LIVE:
setLive(getHome());
break;
case PLAYER:
fetch();
break;
}
}

@Subscribe(threadMode = ThreadMode.MAIN)
public void onPlayerEvent(PlayerEvent event) {
switch (event.getState()) {
Expand Down Expand Up @@ -792,7 +810,7 @@ private void setTrackVisible(boolean visible) {
private void setMetadata() {
String title = mBinding.widget.name.getText().toString();
String artist = mBinding.widget.play.getText().toString();
mPlayers.setMetadata(title, artist, mChannel.getLogo());
mPlayers.setMetadata(title, artist, mChannel.getLogo(), getDefaultArtwork());
}

@Subscribe(threadMode = ThreadMode.MAIN)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,11 @@ private IjkVideoView getIjk() {
return mBinding.ijk;
}

private Drawable getDefaultArtwork() {
if (mPlayers.isExo()) return getExo().getDefaultArtwork();
return getIjk().getDefaultArtwork();
}

private BaseGridView getEpisodeView() {
return Setting.getEpisode() == 0 ? mBinding.episodeHori : mBinding.episodeVert;
}
Expand Down Expand Up @@ -688,7 +693,7 @@ private void setEpisodeView(List<Episode> items) {
if (length > episodeNameLength) episodeNameLength = length;
}
int numColumns = 10;
if (episodeNameLength > 60) numColumns = 1;
if (episodeNameLength > 40) numColumns = 1;
if (episodeNameLength > 30) numColumns = 2;
else if (episodeNameLength > 15) numColumns = 3;
else if (episodeNameLength > 10) numColumns = 4;
Expand Down Expand Up @@ -1421,7 +1426,7 @@ private void setMetadata() {
String title = mHistory.getVodName();
String episode = getEpisode().getName();
String artist = title.equals(episode) ? "" : getString(R.string.play_now, episode);
mPlayers.setMetadata(title, artist, mHistory.getVodPic());
mPlayers.setMetadata(title, artist, mHistory.getVodPic(), getDefaultArtwork());
}

@Subscribe(threadMode = ThreadMode.MAIN)
Expand Down
26 changes: 26 additions & 0 deletions app/src/main/assets/parse.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="zh-TW">

<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes">
<title>解析</title>
</head>

<body>
<div id="container"></div>
<script>
const jxs = "%s";
const url = "%s";
const list = jxs.split(";");
const container = document.getElementById('container');
list.forEach(item => {
const iframe = document.createElement('iframe');
iframe.src = item + url;
iframe.sandbox = 'allow-scripts allow-same-origin allow-forms';
container.appendChild(iframe);
});
</script>
</body>

</html>
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package com.fongmi.android.tv.api.config;

import android.net.Uri;
import android.text.TextUtils;

import com.fongmi.android.tv.App;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.Setting;
import com.fongmi.android.tv.api.Decoder;
import com.fongmi.android.tv.api.LiveParser;
import com.fongmi.android.tv.api.loader.BaseLoader;
import com.fongmi.android.tv.bean.Channel;
import com.fongmi.android.tv.bean.Config;
import com.fongmi.android.tv.bean.Depot;
Expand All @@ -24,6 +26,7 @@
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Expand Down Expand Up @@ -127,13 +130,22 @@ private void parseConfig(String text, Callback callback) {
}

private void parseText(String text, Callback callback) {
Live live = new Live(config.getUrl()).sync();
Live live = new Live(parseName(config.getUrl()), config.getUrl()).sync();
LiveParser.text(live, text);
lives.add(live);
setHome(live, true);
App.post(callback::success);
}

private String parseName(String url) {
Uri uri = Uri.parse(url);
if ("file".equals(uri.getScheme())) return new File(url).getName();
if (uri.getLastPathSegment() != null) return uri.getLastPathSegment();
if (uri.getQuery() != null) return uri.getQuery();
if (uri.getHost() != null) return uri.getHost();
return url;
}

private void checkJson(JsonObject object, Callback callback) {
if (object.has("msg") && callback != null) {
App.post(() -> callback.error(object.get("msg").getAsString()));
Expand All @@ -157,6 +169,7 @@ private void parseConfig(JsonObject object, Callback callback) {
try {
initLive(object);
initOther(object);
BaseLoader.get().parseJar(Json.safeString(object, "spider"));
} catch (Throwable e) {
e.printStackTrace();
} finally {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ private void parseConfig(JsonObject object, Callback callback) {
initSite(object);
initParse(object);
initOther(object);
BaseLoader.get().parseJar(Json.safeString(object, "spider"));
if (loadLive && object.has("lives")) initLive(object);
String notice = Json.safeString(object, "notice");
config.logo(Json.safeString(object, "logo"));
Expand Down
15 changes: 11 additions & 4 deletions app/src/main/java/com/fongmi/android/tv/api/loader/BaseLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

import com.fongmi.android.tv.api.config.LiveConfig;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.bean.Live;
import com.fongmi.android.tv.bean.Site;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderNull;
import com.github.catvod.utils.Util;

import org.json.JSONObject;

Expand Down Expand Up @@ -49,10 +52,10 @@ public Spider getSpider(String key, String api, String ext, String jar) {

public Spider getSpider(Map<String, String> params) {
if (!params.containsKey("siteKey")) return new SpiderNull();
boolean live = params.containsKey("live") && "true".equals(params.get("live"));
boolean vod = !params.containsKey("live") || "false".equals(params.get("live"));
if (live) return LiveConfig.get().getLive(params.get("siteKey")).spider();
if (vod) return VodConfig.get().getSite(params.get("siteKey")).spider();
Live live = LiveConfig.get().getLive(params.get("siteKey"));
Site site = VodConfig.get().getSite(params.get("siteKey"));
if (!site.isEmpty()) return site.spider();
if (!live.isEmpty()) return live.spider();
return new SpiderNull();
}

Expand All @@ -75,6 +78,10 @@ public Object[] proxyLocal(Map<String, String> params) {
}
}

public void parseJar(String jar) {
jarLoader.parseJar(Util.md5(jar), jar);
}

public JSONObject jsonExt(String key, LinkedHashMap<String, String> jxs, String url) throws Throwable {
return jarLoader.jsonExt(key, jxs, url);
}
Expand Down
7 changes: 0 additions & 7 deletions app/src/main/java/com/fongmi/android/tv/bean/Live.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.fongmi.android.tv.bean;

import android.net.Uri;
import android.text.TextUtils;

import androidx.annotation.NonNull;
Expand All @@ -22,7 +21,6 @@
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;

import java.io.File;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collections;
Expand Down Expand Up @@ -137,11 +135,6 @@ public static Live get(String name) {
public Live() {
}

public Live(String url) {
this.name = url.startsWith("file") ? new File(url).getName() : Uri.parse(url).getLastPathSegment();
this.url = url;
}

public Live(@NonNull String name, String url) {
this.name = name;
this.url = url;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ public static void wall() {
EventBus.getDefault().post(new RefreshEvent(Type.WALL));
}

public static void live() {
EventBus.getDefault().post(new RefreshEvent(Type.LIVE));
}

public static void detail() {
EventBus.getDefault().post(new RefreshEvent(Type.DETAIL));
}
Expand Down Expand Up @@ -69,6 +73,6 @@ public String getPath() {
}

public enum Type {
CONFIG, IMAGE, VIDEO, HISTORY, KEEP, SIZE, WALL, DETAIL, PLAYER, SUBTITLE, DANMAKU
CONFIG, IMAGE, VIDEO, HISTORY, KEEP, SIZE, WALL, LIVE, DETAIL, PLAYER, SUBTITLE, DANMAKU
}
}
28 changes: 12 additions & 16 deletions app/src/main/java/com/fongmi/android/tv/player/ParseJob.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
import com.fongmi.android.tv.bean.Parse;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.impl.ParseCallback;
import com.fongmi.android.tv.server.Server;
import com.fongmi.android.tv.ui.custom.CustomWebView;
import com.fongmi.android.tv.utils.UrlUtil;
import com.fongmi.android.tv.utils.Util;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Json;
import com.google.common.net.HttpHeaders;
Expand Down Expand Up @@ -133,11 +135,12 @@ private void jsonMix(String webUrl, String flag) throws Throwable {
private void godParse(String webUrl, String flag) throws Exception {
List<Parse> json = VodConfig.get().getParses(1, flag);
List<Parse> webs = VodConfig.get().getParses(0, flag);
CountDownLatch latch = new CountDownLatch(json.size());
int count = json.size() + (webs.isEmpty() ? 0 : 1);
CountDownLatch latch = new CountDownLatch(count);
for (Parse item : json) infinite.execute(() -> jsonParse(latch, item, webUrl));
if (!webs.isEmpty()) startWeb(webs, webUrl);
latch.await();
if (webs.isEmpty()) onParseError();
for (Parse item : webs) startWeb(item, webUrl);
onParseError();
}

private void jsonParse(CountDownLatch latch, Parse item, String webUrl) {
Expand All @@ -151,7 +154,7 @@ private void jsonParse(CountDownLatch latch, Parse item, String webUrl) {
}

private void checkResult(Map<String, String> headers, String url, String from, boolean error) {
if (isPass(headers, url)) {
if (url.length() > 40) {
onParseSuccess(headers, url, from);
} else if (error) {
onParseError();
Expand All @@ -165,17 +168,10 @@ private void checkResult(Result result) {
else onParseSuccess(result.getHeaders(), result.getUrl().v(), result.getJxFrom());
}

private boolean isPass(Map<String, String> headers, String url) {
try {
if (url.length() < 40) return false;
return OkHttp.newCall(url, Headers.of(headers)).execute().code() == 200;
} catch (Exception e) {
return false;
}
}

private void startWeb(Parse item, String webUrl) {
startWeb("", item, webUrl);
private void startWeb(List<Parse> items, String webUrl) {
StringBuilder sb = new StringBuilder();
for (Parse item : items) sb.append(item.getUrl()).append(";");
startWeb(new HashMap<>(), Server.get().getAddress("/parse?jxs=" + Util.substring(sb.toString()) + "&url=" + webUrl));
}

private void startWeb(String key, Parse item, String webUrl) {
Expand All @@ -192,7 +188,7 @@ private void startWeb(String key, String from, Map<String, String> headers, Stri

private Map<String, String> getHeader(JsonObject object) {
Map<String, String> headers = new HashMap<>();
for (Map.Entry<String, JsonElement> entry : object.entrySet()) if (entry.getKey().equalsIgnoreCase(HttpHeaders.USER_AGENT) || entry.getKey().equalsIgnoreCase(HttpHeaders.REFERER) || entry.getKey().equalsIgnoreCase("ua")) headers.put(UrlUtil.fixHeader(entry.getKey()), object.get(entry.getKey()).getAsString());
for (Map.Entry<String, JsonElement> entry : object.entrySet()) if (!entry.getValue().isJsonNull() && (entry.getKey().equalsIgnoreCase(HttpHeaders.USER_AGENT) || entry.getKey().equalsIgnoreCase(HttpHeaders.REFERER) || entry.getKey().equalsIgnoreCase("ua"))) headers.put(UrlUtil.fixHeader(entry.getKey()), entry.getValue().getAsString());
if (headers.isEmpty()) return parse.getHeaders();
return headers;
}
Expand Down
Loading

0 comments on commit fe829dd

Please sign in to comment.