Support relative path

pull/21/head
FongMi 4 years ago
parent e4f6a6ca78
commit f7d957d67a
  1. 31
      app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
  2. 14
      app/src/main/java/com/fongmi/android/tv/utils/Utils.java

@ -2,7 +2,6 @@ package com.fongmi.android.tv.api;
import android.os.Handler;
import android.os.Looper;
import android.util.Patterns;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.bean.Live;
@ -13,6 +12,7 @@ import com.fongmi.android.tv.net.OKHttp;
import com.fongmi.android.tv.utils.FileUtil;
import com.fongmi.android.tv.utils.Json;
import com.fongmi.android.tv.utils.Prefers;
import com.fongmi.android.tv.utils.Utils;
import com.github.catvod.crawler.Spider;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
@ -28,8 +28,6 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import okhttp3.Response;
public class ApiConfig {
private List<String> ads;
@ -72,8 +70,8 @@ public class ApiConfig {
public void loadConfig(Callback callback) {
new Thread(() -> {
String url = Prefers.getUrl();
if (url.startsWith("file://")) getFileConfig(url, callback);
else if (Patterns.WEB_URL.matcher(url).matches()) getWebConfig(url, callback);
if (url.startsWith("http")) getWebConfig(url, callback);
else if (url.startsWith("file")) getFileConfig(url, callback);
else handler.post(() -> callback.error(0));
}).start();
}
@ -89,8 +87,7 @@ public class ApiConfig {
private void getWebConfig(String url, Callback callback) {
try {
Response response = OKHttp.newCall(url).execute();
parseConfig(new Gson().fromJson(response.body().string(), JsonObject.class), callback);
parseConfig(new Gson().fromJson(OKHttp.newCall(url).execute().body().string(), JsonObject.class), callback);
} catch (Exception e) {
handler.post(() -> callback.error(R.string.error_config_get));
}
@ -111,7 +108,7 @@ public class ApiConfig {
private void parseJson(JsonObject object) {
for (JsonElement element : object.get("sites").getAsJsonArray()) {
Site site = Site.objectFrom(element);
if (site.getExt().startsWith("file://")) site.setExt(FileUtil.read(site.getExt()));
site.setExt(parseExt(site.getExt()));
if (site.getKey().equals(Prefers.getHome())) setHome(site);
sites.add(site);
}
@ -120,14 +117,22 @@ public class ApiConfig {
ads.addAll(Json.safeList(object, "ads"));
}
private String parseExt(String ext) {
if (ext.startsWith("http")) return ext;
else if (ext.startsWith("file")) return FileUtil.read(ext);
else if (ext.endsWith(".json")) return parseExt(Utils.convert(ext));
return ext;
}
private void parseJar(String spider) throws Exception {
if (spider.contains(";md5")) spider = spider.split(";md5")[0];
if (spider.startsWith("file://")) {
loader.load(FileUtil.getLocal(spider));
} else if (Patterns.WEB_URL.matcher(spider).matches()) {
Response response = OKHttp.newCall(spider).execute();
FileUtil.write(FileUtil.getJar(), response.body().bytes());
if (spider.startsWith("http")) {
FileUtil.write(FileUtil.getJar(), OKHttp.newCall(spider).execute().body().bytes());
loader.load(FileUtil.getJar());
} else if (spider.startsWith("file")) {
loader.load(FileUtil.getLocal(spider));
} else if (!spider.isEmpty()) {
parseJar(Utils.convert(spider));
}
}

@ -4,9 +4,11 @@ import android.app.Activity;
import android.app.PictureInPictureParams;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.util.Rational;
import android.view.View;
@ -18,7 +20,7 @@ import java.util.regex.Pattern;
public class Utils {
private static final Pattern snifferMatch = Pattern.compile("http((?!http).){26,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)\\?.*|http((?!http).){26,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)|http((?!http).){26,}?/m3u8\\?pt=m3u8.*|http((?!http).)*?default\\.ixigua\\.com/.*|http((?!http).)*?cdn-tos[^\\?]*|http((?!http).)*?/obj/tos[^\\?]*|http.*?/player/m3u8play\\.php\\?url=.*|http.*?/player/.*?[pP]lay\\.php\\?url=.*|http.*?/playlist/m3u8/\\?vid=.*|http.*?\\.php\\?type=m3u8&.*|http.*?/download.aspx\\?.*|http.*?/api/up_api.php\\?.*|https.*?\\.66yk\\.cn.*|http((?!http).)*?netease\\.com/file/.*");
private static final Pattern SNIFFER = Pattern.compile("http((?!http).){26,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)\\?.*|http((?!http).){26,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)|http((?!http).){26,}?/m3u8\\?pt=m3u8.*|http((?!http).)*?default\\.ixigua\\.com/.*|http((?!http).)*?cdn-tos[^\\?]*|http((?!http).)*?/obj/tos[^\\?]*|http.*?/player/m3u8play\\.php\\?url=.*|http.*?/player/.*?[pP]lay\\.php\\?url=.*|http.*?/playlist/m3u8/\\?vid=.*|http.*?\\.php\\?type=m3u8&.*|http.*?/download.aspx\\?.*|http.*?/api/up_api.php\\?.*|https.*?\\.66yk\\.cn.*|http((?!http).)*?netease\\.com/file/.*");
public static boolean hasPIP() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && App.get().getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE);
@ -55,7 +57,15 @@ public class Utils {
public static boolean isVideoFormat(String url) {
if (url.contains("=http") || url.contains("=https") || url.contains("=https%3a%2f") || url.contains("=http%3a%2f")) return false;
if (snifferMatch.matcher(url).find()) return !url.contains("cdn-tos") || (!url.contains(".js") && !url.contains(".css"));
if (SNIFFER.matcher(url).find()) return !url.contains("cdn-tos") || (!url.contains(".js") && !url.contains(".css"));
return false;
}
public static String convert(String text) {
if (TextUtils.isEmpty(text)) return "";
if (text.startsWith(".")) text = text.substring(1);
if (text.startsWith("/")) text = text.substring(1);
Uri uri = Uri.parse(Prefers.getUrl());
return uri.toString().replace(uri.getLastPathSegment(), text);
}
}

Loading…
Cancel
Save