Add danmaku cache

pull/605/head
jhengazuji 5 months ago
parent e25c574f46
commit c477645374
  1. 1
      app/src/main/java/com/fongmi/android/tv/player/danmaku/DanPlayer.java
  2. 62
      app/src/main/java/com/fongmi/android/tv/player/danmaku/Loader.java
  3. 18
      catvod/src/main/java/com/github/catvod/utils/Path.java

@ -91,7 +91,6 @@ public class DanPlayer implements DrawHandler.Callback {
public void release() {
App.execute(() -> {
if (!isPrepared()) return;
loader.clear();
view.release();
});
}

@ -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<String, byte[]> 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<String, byte[]> 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();
}
}

@ -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];
}
}

Loading…
Cancel
Save