Support txt dammuku

pull/589/head
FongMi 10 months ago
parent 5e17ebe835
commit 8f0c4212ee
  1. 41
      app/src/main/java/com/fongmi/android/tv/bean/Danmaku.java
  2. 13
      app/src/main/java/com/fongmi/android/tv/player/danmaku/Parser.java

@ -8,8 +8,13 @@ import org.simpleframework.xml.Root;
import org.simpleframework.xml.Text;
import org.simpleframework.xml.core.Persister;
import java.util.Collections;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Root(name = "i", strict = false)
public class Danmaku {
@ -17,17 +22,31 @@ public class Danmaku {
@ElementList(entry = "d", required = false, inline = true)
private List<Data> data;
public static Danmaku fromXml(String str) {
public static Danmaku objectFrom(InputStream is) {
try {
return new Persister().read(Danmaku.class, str);
return new Persister().read(Danmaku.class, is);
} catch (Exception e) {
e.printStackTrace();
return new Danmaku();
return fromText(is);
}
}
public static Danmaku fromText(InputStream is) {
Danmaku danmaku = new Danmaku();
Pattern pattern = Pattern.compile("\\[(.*?)\\](.*)");
try (BufferedReader br = new BufferedReader(new InputStreamReader(is))) {
String line;
while ((line = br.readLine()) != null) {
Matcher matcher = pattern.matcher(line);
if (matcher.matches() && matcher.groupCount() == 2) danmaku.getData().add(new Data(matcher));
}
return danmaku;
} catch (Exception ignored) {
return danmaku;
}
}
public List<Data> getData() {
return data == null ? Collections.emptyList() : data;
return data = data == null ? new ArrayList<>() : data;
}
public static class Data {
@ -38,6 +57,16 @@ public class Danmaku {
@Text(required = false)
public String text;
public Data(Matcher matcher) {
this.param = matcher.group(1);
this.text = matcher.group(2);
}
public Data(String param, String text) {
this.param = param;
this.text = text;
}
public String getParam() {
return TextUtils.isEmpty(param) ? "" : param;
}

@ -6,6 +6,7 @@ import com.fongmi.android.tv.bean.Danmaku;
import com.fongmi.android.tv.utils.UrlUtil;
import com.github.catvod.net.OkHttp;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@ -18,17 +19,25 @@ import master.flame.danmaku.danmaku.util.DanmakuUtils;
public class Parser extends BaseDanmakuParser {
private final Map<String, String> charMap;
private final Danmaku danmaku;
private BaseDanmaku item;
private Danmaku danmaku;
private int index;
public Parser(String path) {
danmaku = Danmaku.fromXml(OkHttp.string(UrlUtil.convert(path)));
charMap = new HashMap<>();
charMap.put("&amp;", "&");
charMap.put("&quot;", "\"");
charMap.put("&gt;", ">");
charMap.put("&lt;", "<");
fetch(path);
}
private void fetch(String path) {
try {
danmaku = Danmaku.objectFrom(OkHttp.newCall(UrlUtil.convert(path)).execute().body().byteStream());
} catch (IOException e) {
danmaku = new Danmaku();
}
}
@Override

Loading…
Cancel
Save