diff --git a/app/build.gradle b/app/build.gradle index c8687413..c0c81b31 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,5 +45,6 @@ dependencies { implementation 'cn.wanghaomiao:JsoupXpath:2.5.1' implementation 'com.google.zxing:core:3.3.0' //implementation 'com.orhanobut:logger:2.2.0' + implementation 'androidx.core:core:1.8.0' implementation 'org.jsoup:jsoup:1.15.3' } \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 89f22d06..124dd305 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -8,6 +8,9 @@ -keep class com.github.catvod.spider.* { public ; } -keep class com.github.catvod.parser.* { public ; } +# AndroidX +-keep class androidx.core.** { *; } + # Gson -keepattributes Signature -keepattributes *Annotation* diff --git a/app/src/main/java/com/github/catvod/bean/market/Item.java b/app/src/main/java/com/github/catvod/bean/market/Item.java new file mode 100644 index 00000000..11e392a6 --- /dev/null +++ b/app/src/main/java/com/github/catvod/bean/market/Item.java @@ -0,0 +1,43 @@ +package com.github.catvod.bean.market; + +import android.text.TextUtils; + +import com.github.catvod.bean.Vod; +import com.google.gson.Gson; +import com.google.gson.annotations.SerializedName; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +public class Item { + + @SerializedName("name") + private String name; + @SerializedName("url") + private String url; + @SerializedName("icon") + private String icon; + + public static List arrayFrom(String str) { + Type listType = new TypeToken>() {}.getType(); + return new Gson().fromJson(str, listType); + } + + public String getName() { + return TextUtils.isEmpty(name) ? "" : name; + } + + public String getUrl() { + return TextUtils.isEmpty(url) ? "" : url; + } + + public String getIcon() { + return TextUtils.isEmpty(icon) ? "" : icon; + } + + public Vod vod() { + return new Vod(getUrl(), getName(), getIcon()); + } +} diff --git a/app/src/main/java/com/github/catvod/net/OkHttp.java b/app/src/main/java/com/github/catvod/net/OkHttp.java index a8ead055..9dc1772b 100644 --- a/app/src/main/java/com/github/catvod/net/OkHttp.java +++ b/app/src/main/java/com/github/catvod/net/OkHttp.java @@ -41,6 +41,10 @@ public class OkHttp { return client().newBuilder().followRedirects(false).followSslRedirects(false).build(); } + public static Response newCall(String url) throws IOException { + return client().newCall(new Request.Builder().url(url).build()).execute(); + } + public static Response newCall(String url, Map header) throws IOException { return client().newCall(new Request.Builder().url(url).headers(Headers.of(header)).build()).execute(); } diff --git a/app/src/main/java/com/github/catvod/spider/Market.java b/app/src/main/java/com/github/catvod/spider/Market.java new file mode 100644 index 00000000..c359fadf --- /dev/null +++ b/app/src/main/java/com/github/catvod/spider/Market.java @@ -0,0 +1,82 @@ +package com.github.catvod.spider; + +import android.app.Activity; +import android.content.Context; +import android.net.Uri; + +import com.github.catvod.bean.Result; +import com.github.catvod.bean.Vod; +import com.github.catvod.bean.market.Item; +import com.github.catvod.crawler.Spider; +import com.github.catvod.net.OkHttp; +import com.github.catvod.utils.FileUtil; +import com.github.catvod.utils.Utils; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import okhttp3.Response; + +public class Market extends Spider { + + private List mItems; + + @Override + public void init(Context context, String extend) throws Exception { + mItems = Item.arrayFrom(extend); + } + + @Override + public String homeVideoContent() { + List list = new ArrayList<>(); + for (Item item : mItems) list.add(item.vod()); + return Result.string(list); + } + + @Override + public String detailContent(List ids) throws Exception { + new Thread(() -> download(ids.get(0))).start(); + Init.run(this::finish); + return ""; + } + + private void finish() { + try { + Activity activity = Init.getActivity(); + if (activity != null) activity.finish(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void download(String url) { + try { + Utils.notify("正在下載..."); + Response response = OkHttp.newCall(url); + File file = FileUtil.getCacheFile(Uri.parse(url).getLastPathSegment()); + download(file, response.body().byteStream(), Double.parseDouble(response.header("Content-Length", "1"))); + FileUtil.openFile(FileUtil.chmod(file)); + } catch (Exception e) { + Utils.notify(e.getMessage()); + } + } + + private void download(File file, InputStream is, double length) throws Exception { + FileOutputStream os = new FileOutputStream(file); + try (BufferedInputStream input = new BufferedInputStream(is)) { + byte[] buffer = new byte[4096]; + int readBytes; + long totalBytes = 0; + while ((readBytes = input.read(buffer)) != -1) { + totalBytes += readBytes; + os.write(buffer, 0, readBytes); + int progress = (int) (totalBytes / length * 100.0); + if (progress % 20 == 0) Utils.notify("正在下載..." + progress + "%"); + } + } + } +} diff --git a/app/src/main/java/com/github/catvod/utils/FileUtil.java b/app/src/main/java/com/github/catvod/utils/FileUtil.java index 732f3742..84903048 100644 --- a/app/src/main/java/com/github/catvod/utils/FileUtil.java +++ b/app/src/main/java/com/github/catvod/utils/FileUtil.java @@ -1,5 +1,12 @@ package com.github.catvod.utils; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.text.TextUtils; + +import androidx.core.content.FileProvider; + import com.github.catvod.spider.Init; import java.io.File; @@ -7,6 +14,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.net.URLConnection; public class FileUtil { @@ -64,4 +72,21 @@ public class FileUtil { return ""; } } + + public static void openFile(File file) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.setDataAndType(getShareUri(file), FileUtil.getMimeType(file.getName())); + Init.context().startActivity(intent); + } + + private static String getMimeType(String fileName) { + String mimeType = URLConnection.guessContentTypeFromName(fileName); + return TextUtils.isEmpty(mimeType) ? "*/*" : mimeType; + } + + private static Uri getShareUri(File file) { + return Build.VERSION.SDK_INT < Build.VERSION_CODES.N ? Uri.fromFile(file) : FileProvider.getUriForFile(Init.context(), Init.context().getPackageName() + ".provider", file); + } } diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 96326cde..fb96250a 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index 8dc4f91c..12a64e0c 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -6aa99ddfd99dd2e5b68615edd29ddb43 +1857d736869fbeb63ddf63e9065d053b diff --git a/jar/genJar.bat b/jar/genJar.bat index 76043103..6b34e7ca 100644 --- a/jar/genJar.bat +++ b/jar/genJar.bat @@ -8,6 +8,7 @@ java -jar "%~dp0\3rd\baksmali-2.5.2.jar" d "%~dp0\..\app\build\intermediates\dex rd /s/q "%~dp0\spider.jar\smali\com\github\catvod\spider" rd /s/q "%~dp0\spider.jar\smali\com\github\catvod\parser" rd /s/q "%~dp0\spider.jar\smali\com\github\catvod\js" +rd /s/q "%~dp0\spider.jar\smali\androidx\core" if not exist "%~dp0\spider.jar\smali\com\github\catvod\" md "%~dp0\spider.jar\smali\com\github\catvod\" @@ -16,6 +17,7 @@ java -Dfile.encoding=utf-8 -jar "%~dp0\3rd\oss.jar" "%~dp0\Smali_classes" move "%~dp0\Smali_classes\com\github\catvod\spider" "%~dp0\spider.jar\smali\com\github\catvod\" move "%~dp0\Smali_classes\com\github\catvod\parser" "%~dp0\spider.jar\smali\com\github\catvod\" move "%~dp0\Smali_classes\com\github\catvod\js" "%~dp0\spider.jar\smali\com\github\catvod\" +move "%~dp0\Smali_classes\androidx\core" "%~dp0\spider.jar\smali\androidx\core\" java -jar "%~dp0\3rd\apktool_2.4.1.jar" b "%~dp0\spider.jar" -c