package com.github.catvod.utils; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.net.Uri; import android.os.Build; import android.view.View; import android.view.ViewGroup; import android.webkit.ValueCallback; import android.webkit.WebView; import android.webkit.WebViewClient; import com.github.catvod.spider.Init; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.regex.Pattern; public class Util { public static final Pattern RULE = Pattern.compile("http((?!http).){12,}?\\.(m3u8|mp4|mkv|flv|mp3|m4a|aac)\\?.*|http((?!http).){12,}\\.(m3u8|mp4|mkv|flv|mp3|m4a|aac)|http((?!http).)*?video/tos*"); public static final Pattern THUNDER = Pattern.compile("(magnet|thunder|ed2k):.*"); public static final String CHROME = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"; public static final List MEDIA = Arrays.asList("mp4", "mkv", "wmv", "flv", "avi", "iso", "mpg", "ts", "mp3", "aac", "flac", "m4a", "ape", "ogg"); public static final List SUB = Arrays.asList("srt", "ass", "ssa", "vtt"); public static boolean isVip(String url) { List hosts = Arrays.asList("iqiyi.com", "v.qq.com", "youku.com", "le.com", "tudou.com", "mgtv.com", "sohu.com", "acfun.cn", "bilibili.com", "baofeng.com", "pptv.com"); for (String host : hosts) if (url.contains(host)) return true; return false; } public static boolean isThunder(String url) { return THUNDER.matcher(url).find() || isTorrent(url); } public static boolean isTorrent(String url) { return !url.startsWith("magnet") && url.split(";")[0].endsWith(".torrent"); } public static boolean isVideoFormat(String url) { if (url.contains("url=http") || url.contains(".js") || url.contains(".css") || url.contains(".html")) return false; return RULE.matcher(url).find(); } public static boolean isSub(String ext) { return SUB.contains(ext); } public static boolean isMedia(String text) { return MEDIA.contains(getExt(text).toLowerCase()); } public static String getExt(String name) { return name.contains(".") ? name.substring(name.lastIndexOf(".") + 1) : name; } public static String getSize(double size) { if (size <= 0) return ""; if (size > 1024 * 1024 * 1024 * 1024.0) { size /= (1024 * 1024 * 1024 * 1024.0); return String.format(Locale.getDefault(), "%.2f%s", size, "TB"); } else if (size > 1024 * 1024 * 1024.0) { size /= (1024 * 1024 * 1024.0); return String.format(Locale.getDefault(), "%.2f%s", size, "GB"); } else if (size > 1024 * 1024.0) { size /= (1024 * 1024.0); return String.format(Locale.getDefault(), "%.2f%s", size, "MB"); } else { size /= 1024.0; return String.format(Locale.getDefault(), "%.2f%s", size, "KB"); } } public static String fixUrl(String base, String src) { if (src.startsWith("//")) { Uri parse = Uri.parse(base); return parse.getScheme() + ":" + src; } else if (!src.contains("://")) { Uri parse = Uri.parse(base); return parse.getScheme() + "://" + parse.getHost() + src; } else { return src; } } public static String removeExt(String text) { return text.contains(".") ? text.substring(0, text.lastIndexOf(".")) : text; } public static String substring(String text) { return substring(text, 1); } public static String substring(String text, int num) { if (text != null && text.length() > num) { return text.substring(0, text.length() - num); } else { return text; } } public static String getVar(String data, String param) { for (String var : data.split("var")) if (var.contains(param)) return checkVar(var); return ""; } private static String checkVar(String var) { if (var.contains("'")) return var.split("'")[1]; if (var.contains("\"")) return var.split("\"")[1]; return ""; } public static void copy(String text) { ClipboardManager manager = (ClipboardManager) Init.context().getSystemService(Context.CLIPBOARD_SERVICE); manager.setPrimaryClip(ClipData.newPlainText("fongmi", text)); Notify.show("已複製 " + text); } public static void loadUrl(WebView webView, String script) { loadUrl(webView, script, null); } public static void loadUrl(WebView webView, String script, ValueCallback callback) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { webView.evaluateJavascript(script, callback); } else { webView.loadUrl("javascript:" + script); } } public static void addView(View view, ViewGroup.LayoutParams params) { try { ViewGroup group = Init.getActivity().getWindow().getDecorView().findViewById(android.R.id.content); group.addView(view, params); } catch (Exception e) { e.printStackTrace(); } } public static void removeView(View view) { try { ViewGroup group = Init.getActivity().getWindow().getDecorView().findViewById(android.R.id.content); group.removeView(view); } catch (Exception e) { e.printStackTrace(); } } public static void loadWebView(String url, WebViewClient client) { Init.run(() -> { WebView webView = new WebView(Init.context()); webView.getSettings().setDatabaseEnabled(true); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setJavaScriptEnabled(true); addView(webView, new ViewGroup.LayoutParams(0, 0)); webView.setWebViewClient(client); webView.loadUrl(url); }); } }