Support assets://

pull/197/head
FongMi 2 years ago
parent 980e7a535f
commit 6400ddb8b3
  1. 3
      app/src/leanback/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java
  2. 6
      app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
  3. 6
      app/src/main/java/com/fongmi/android/tv/api/Decoder.java
  4. 3
      app/src/main/java/com/fongmi/android/tv/server/Go.java
  5. 4
      app/src/main/java/com/fongmi/android/tv/server/Nano.java
  6. 2
      app/src/main/java/com/fongmi/android/tv/utils/UrlUtil.java
  7. 3
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java
  8. 24
      catvod/src/main/java/com/github/catvod/utils/Asset.java
  9. 16
      catvod/src/main/java/com/github/catvod/utils/Path.java
  10. 3
      forcetech/src/main/java/com/gsoft/mitv/MainActivity.java
  11. 4
      quickjs/build.gradle
  12. 6
      quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java
  13. 5
      quickjs/src/main/java/com/fongmi/quickjs/utils/Module.java

@ -130,6 +130,9 @@ public class ConfigDialog implements DialogInterface.OnDismissListener {
} else if (append && s.equalsIgnoreCase("f")) {
append = false;
binding.text.append("ile://");
} else if (append && s.equalsIgnoreCase("a")) {
append = false;
binding.text.append("ssets://");
} else if (s.length() > 1) {
append = false;
} else if (s.length() == 0) {

@ -214,17 +214,17 @@ public class ApiConfig {
if (TextUtils.isEmpty(api)) return api;
if (api.startsWith("http")) return api;
if (api.startsWith("file")) return UrlUtil.convert(api);
if (api.endsWith(".js")) return parseApi(UrlUtil.convert(config.getUrl(), api));
if (api.endsWith(".js") || api.endsWith(".py")) return parseApi(UrlUtil.convert(config.getUrl(), api));
return api;
}
private String parseExt(String ext) {
if (TextUtils.isEmpty(ext)) return ext;
if (ext.startsWith("http")) return ext;
if (ext.startsWith("file")) return UrlUtil.convert(ext);
if (ext.startsWith("img+")) return Decoder.getExt(ext);
if (ext.startsWith("file")) return UrlUtil.convert(ext);
if (ext.contains("http") || ext.contains("file")) return ext;
if (ext.endsWith(".txt") || ext.endsWith(".json") || ext.endsWith(".py") || ext.endsWith(".js")) return parseExt(UrlUtil.convert(config.getUrl(), ext));
if (ext.endsWith(".txt") || ext.endsWith(".json") || ext.endsWith(".js") || ext.endsWith(".py")) return parseExt(UrlUtil.convert(config.getUrl(), ext));
return ext;
}

@ -4,6 +4,7 @@ import android.util.Base64;
import com.fongmi.android.tv.utils.UrlUtil;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Asset;
import com.github.catvod.utils.Json;
import com.github.catvod.utils.Path;
import com.github.catvod.utils.Util;
@ -32,7 +33,7 @@ public class Decoder {
}
private static String fix(String url, String data) {
if (url.startsWith("file")) url = UrlUtil.convert(url);
if (url.startsWith("file") || url.startsWith("assets")) url = UrlUtil.convert(url);
data = data.replace("./", url.substring(0, url.lastIndexOf("/") + 1));
return data;
}
@ -58,8 +59,9 @@ public class Decoder {
}
private static String getData(String url) {
if (url.startsWith("http")) return OkHttp.string(url);
if (url.startsWith("file")) return Path.read(url);
if (url.startsWith("assets")) return Asset.read(url);
if (url.startsWith("http")) return OkHttp.string(url);
return "";
}

@ -1,5 +1,6 @@
package com.fongmi.android.tv.server;
import com.github.catvod.utils.Asset;
import com.github.catvod.utils.Path;
import com.github.catvod.utils.Shell;
@ -12,7 +13,7 @@ public class Go {
public static void start() {
new Thread(() -> {
File file = Path.cache(GO);
if (!file.exists()) Path.copy(Path.getAsset(GO), file);
if (!file.exists()) Path.copy(Asset.open(GO), file);
Shell.exec("killall -9 " + GO);
Shell.exec("nohup " + file);
}).start();

@ -10,7 +10,7 @@ import com.fongmi.android.tv.server.process.Cache;
import com.fongmi.android.tv.server.process.Local;
import com.fongmi.android.tv.server.process.Process;
import com.fongmi.android.tv.utils.M3U8;
import com.github.catvod.utils.Path;
import com.github.catvod.utils.Asset;
import com.google.common.net.HttpHeaders;
import java.io.ByteArrayInputStream;
@ -120,7 +120,7 @@ public class Nano extends NanoHTTPD {
private Response getAssets(String path) {
try {
if (path.isEmpty()) path = "index.html";
InputStream is = Path.getAsset(path);
InputStream is = Asset.open(path);
return newFixedLengthResponse(Response.Status.OK, getMimeTypeForFile(path), is, is.available());
} catch (IOException e) {
return newFixedLengthResponse(Response.Status.NOT_FOUND, MIME_HTML, null);

@ -38,6 +38,7 @@ public class UrlUtil {
public static String convert(String baseUrl, String path) {
if (path.startsWith("clan")) return fixUrl(path);
if (path.startsWith("assets")) return convert(path);
return path.isEmpty() ? "" : UriUtil.resolve(baseUrl, path);
}
@ -46,6 +47,7 @@ public class UrlUtil {
String scheme = scheme(url);
if ("file".equals(scheme)) return Server.get().getAddress(url);
if ("local".equals(scheme)) return Server.get().getAddress(host);
if ("assets".equals(scheme)) return Server.get().getAddress(url.substring(9));
if ("proxy".equals(scheme)) return url.replace("proxy://", Server.get().getAddress("proxy?"));
return url;
}

@ -109,6 +109,9 @@ public class ConfigDialog {
} else if (append && s.equalsIgnoreCase("f")) {
append = false;
binding.text.append("ile://");
} else if (append && s.equalsIgnoreCase("a")) {
append = false;
binding.text.append("ssets://");
} else if (s.length() > 1) {
append = false;
} else if (s.length() == 0) {

@ -0,0 +1,24 @@
package com.github.catvod.utils;
import com.github.catvod.Init;
import java.io.InputStream;
public class Asset {
public static InputStream open(String fileName) {
try {
return Init.context().getAssets().open(fileName.replace("assets://", ""));
} catch (Exception e) {
return null;
}
}
public static String read(String fileName) {
try {
return Path.read(open(fileName));
} catch (Exception e) {
return "";
}
}
}

@ -114,22 +114,6 @@ public class Path {
return file2.exists() ? file2 : file1.exists() ? file1 : new File(path);
}
public static InputStream getAsset(String fileName) {
try {
return Init.context().getAssets().open(fileName);
} catch (Exception e) {
return null;
}
}
public static String asset(String fileName) {
try {
return read(getAsset(fileName));
} catch (Exception e) {
return "";
}
}
public static String read(File file) {
try {
return read(new FileInputStream(file));

@ -6,6 +6,7 @@ import android.os.IBinder;
import com.anymediacloud.iptv.standard.ForceTV;
import com.forcetech.Util;
import com.github.catvod.utils.Asset;
import com.github.catvod.utils.Path;
import java.io.File;
@ -27,7 +28,7 @@ public class MainActivity extends Service {
private void checkLibrary() {
String name = "libmitv.so";
File file = Path.cache(name);
if (!file.exists()) Path.copy(Path.getAsset(name), file);
if (!file.exists()) Path.copy(Asset.open(name), file);
}
@Override

@ -9,6 +9,10 @@ android {
minSdk 21
targetSdk 28
}
lint {
disable 'UnsafeOptInUsageError'
}
}
dependencies {

@ -11,8 +11,8 @@ import com.fongmi.quickjs.method.Global;
import com.fongmi.quickjs.method.Local;
import com.fongmi.quickjs.utils.JSUtil;
import com.fongmi.quickjs.utils.Module;
import com.github.catvod.utils.Asset;
import com.github.catvod.utils.Json;
import com.github.catvod.utils.Path;
import com.whl.quickjs.wrapper.JSArray;
import com.whl.quickjs.wrapper.JSMethod;
import com.whl.quickjs.wrapper.JSObject;
@ -144,7 +144,7 @@ public class Spider extends com.github.catvod.crawler.Spider {
private void createCtx() {
ctx = QuickJSContext.create();
ctx.setConsole(new Console());
ctx.evaluate(Path.asset("js/lib/http.js"));
ctx.evaluate(Asset.read("js/lib/http.js"));
Global.create(ctx, executor).setProperty();
ctx.getGlobalObject().setProperty("local", Local.class);
ctx.setModuleLoader(new QuickJSContext.BytecodeModuleLoader() {
@ -211,7 +211,7 @@ public class Spider extends com.github.catvod.crawler.Spider {
String content = Module.get().fetch(api);
if (content.startsWith("//bb")) ctx.execute(Module.get().bb(content));
else ctx.evaluateModule(content.replace(spider, global), api);
ctx.evaluateModule(String.format(Path.asset("js/lib/spider.js"), api));
ctx.evaluateModule(String.format(Asset.read("js/lib/spider.js"), api));
if (content.startsWith("//bb") || content.contains(jsEval)) cat = true;
jsObject = (JSObject) ctx.getProperty(ctx.getGlobalObject(), spider);
}

@ -4,6 +4,7 @@ import android.net.Uri;
import android.util.Base64;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Asset;
import com.github.catvod.utils.Path;
import com.google.common.net.HttpHeaders;
@ -33,8 +34,8 @@ public class Module {
public String fetch(String name) {
if (cache.contains(name)) return cache.get(name);
if (name.startsWith("http")) cache.put(name, request(name));
if (name.startsWith("lib/")) cache.put(name, Path.asset("js/" + name));
if (name.startsWith("assets")) cache.put(name, Path.asset(name.substring(9)));
if (name.startsWith("assets")) cache.put(name, Asset.read(name));
if (name.startsWith("lib/")) cache.put(name, Asset.read("js/" + name));
return cache.get(name);
}

Loading…
Cancel
Save