From c477645374e5bcff5dd2e84de67e813fe3aead4a Mon Sep 17 00:00:00 2001 From: jhengazuji Date: Sun, 16 Nov 2025 14:39:41 +0800 Subject: [PATCH] Add danmaku cache --- .../android/tv/player/danmaku/DanPlayer.java | 1 - .../android/tv/player/danmaku/Loader.java | 62 ++++--------------- .../java/com/github/catvod/utils/Path.java | 18 ++++-- 3 files changed, 24 insertions(+), 57 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/player/danmaku/DanPlayer.java b/app/src/main/java/com/fongmi/android/tv/player/danmaku/DanPlayer.java index 3e3b47abb..6a7cbf130 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/danmaku/DanPlayer.java +++ b/app/src/main/java/com/fongmi/android/tv/player/danmaku/DanPlayer.java @@ -91,7 +91,6 @@ public class DanPlayer implements DrawHandler.Callback { public void release() { App.execute(() -> { if (!isPrepared()) return; - loader.clear(); view.release(); }); } diff --git a/app/src/main/java/com/fongmi/android/tv/player/danmaku/Loader.java b/app/src/main/java/com/fongmi/android/tv/player/danmaku/Loader.java index 3e709c6ae..38d3c5311 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/danmaku/Loader.java +++ b/app/src/main/java/com/fongmi/android/tv/player/danmaku/Loader.java @@ -1,71 +1,37 @@ package com.fongmi.android.tv.player.danmaku; -import com.fongmi.android.tv.Constant; import com.fongmi.android.tv.bean.Danmaku; -import com.github.catvod.net.OkHttp; +import com.fongmi.android.tv.utils.Download; +import com.github.catvod.utils.Path; -import java.io.ByteArrayInputStream; -import java.io.IOException; +import java.io.File; import java.io.InputStream; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.Map; import master.flame.danmaku.danmaku.loader.ILoader; -import master.flame.danmaku.danmaku.loader.IllegalDataException; import master.flame.danmaku.danmaku.parser.android.AndroidFileSource; -import okhttp3.OkHttpClient; -import okhttp3.Response; public class Loader implements ILoader { - private static final int MAX_CACHE_SIZE = 10; - private final Map cache; - private final OkHttpClient client; private AndroidFileSource source; - public Loader() { - client = OkHttp.client(Constant.TIMEOUT_DANMAKU); - cache = Collections.synchronizedMap(new LinkedHashMap<>(MAX_CACHE_SIZE, 0.75f, true) { - @Override - protected boolean removeEldestEntry(Entry eldest) { - return size() > MAX_CACHE_SIZE; - } - }); - } - public Loader load(Danmaku item) { - try { - OkHttp.cancel("danmaku"); - load(item.getRealUrl()); - return this; - } catch (IllegalDataException e) { - return this; - } + try { load(item.getRealUrl()); } catch (Throwable ignored) {} + return this; } @Override - public void load(String url) throws IllegalDataException { - if (cache.containsKey(url)) { - load(cache.get(url)); - } else try (Response res = OkHttp.newCall(client, url, "danmaku").execute()) { - byte[] data = res.body().bytes(); - if (data.length > 0) load(url, data); - } catch (IOException ignored) { - } - } - - public void load(String key, byte[] bytes) throws IllegalDataException { - cache.put(key, bytes); - load(bytes); + public void load(String url) { + File file = Path.danmaku(url); + if (!Path.exists(file)) Download.create(url, file).start(); + load(file); } - public void load(byte[] bytes) throws IllegalDataException { - load(new ByteArrayInputStream(bytes)); + public void load(File file) { + source = new AndroidFileSource(file); } @Override - public void load(InputStream stream) throws IllegalDataException { + public void load(InputStream stream) { source = new AndroidFileSource(stream); } @@ -73,8 +39,4 @@ public class Loader implements ILoader { public AndroidFileSource getDataSource() { return source; } - - public void clear() { - cache.clear(); - } } \ No newline at end of file diff --git a/catvod/src/main/java/com/github/catvod/utils/Path.java b/catvod/src/main/java/com/github/catvod/utils/Path.java index 29bebff5e..25e444d61 100644 --- a/catvod/src/main/java/com/github/catvod/utils/Path.java +++ b/catvod/src/main/java/com/github/catvod/utils/Path.java @@ -81,6 +81,10 @@ public class Path { return mkdir(new File(cache() + File.separator + "jpa")); } + public static File danmaku() { + return mkdir(new File(cache() + File.separator + "danmaku")); + } + public static File thunder() { return mkdir(new File(cache() + File.separator + "thunder")); } @@ -117,6 +121,10 @@ public class Path { return new File(jar(), Util.md5(name).concat(".jar")); } + public static File danmaku(String name) { + return new File(danmaku(), Util.md5(name)); + } + public static File thunder(String name) { return mkdir(new File(thunder(), name)); } @@ -128,11 +136,7 @@ public class Path { } public static String read(File file) { - try { - return new String(readToByte(file), StandardCharsets.UTF_8); - } catch (IOException e) { - return ""; - } + return new String(readToByte(file), StandardCharsets.UTF_8); } public static String read(InputStream is) { @@ -144,9 +148,11 @@ public class Path { } } - private static byte[] readToByte(File file) throws IOException { + public static byte[] readToByte(File file) { try (FileInputStream is = new FileInputStream(file)) { return readToByte(is); + } catch (IOException e) { + return new byte[0]; } }