diff --git a/app/src/main/java/com/github/catvod/ali/API.java b/app/src/main/java/com/github/catvod/ali/API.java index a73ba2f0..dda67f14 100644 --- a/app/src/main/java/com/github/catvod/ali/API.java +++ b/app/src/main/java/com/github/catvod/ali/API.java @@ -39,7 +39,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Executors; @@ -263,12 +262,12 @@ public class API { String result = post("adrive/v3/share_link/get_share_by_anonymous", body); JSONObject object = new JSONObject(result); List files = new ArrayList<>(); - LinkedHashMap> subMap = new LinkedHashMap<>(); - listFiles(new Item(getParentFileId(fileId, object)), files, subMap); + List subs = new ArrayList<>(); + listFiles(new Item(getParentFileId(fileId, object)), files, subs); List playFrom = Arrays.asList("原畫", "超清", "高清"); List episode = new ArrayList<>(); List playUrl = new ArrayList<>(); - for (Item file : files) episode.add(file.getDisplayName() + "$" + file.getFileId() + findSubs(file.getName(), subMap)); + for (Item file : files) episode.add(file.getDisplayName() + "$" + file.getFileId() + findSubs(file.getName(), subs)); for (int i = 0; i < playFrom.size(); i++) playUrl.add(TextUtils.join("#", episode)); Vod vod = new Vod(); vod.setVodId(url); @@ -281,11 +280,11 @@ public class API { return vod; } - private void listFiles(Item folder, List files, LinkedHashMap> subMap) throws Exception { - listFiles(folder, files, subMap, ""); + private void listFiles(Item folder, List files, List subs) throws Exception { + listFiles(folder, files, subs, ""); } - private void listFiles(Item parent, List files, LinkedHashMap> subMap, String marker) throws Exception { + private void listFiles(Item parent, List files, List subs, String marker) throws Exception { JSONObject body = new JSONObject(); List folders = new ArrayList<>(); body.put("limit", 200); @@ -301,16 +300,14 @@ public class API { } else if (file.getCategory().equals("video") || file.getCategory().equals("audio")) { files.add(file.parent(parent.getName())); } else if (Utils.isSub(file.getExt())) { - String key = Utils.removeExt(file.getName()); - if (!subMap.containsKey(key)) subMap.put(key, new ArrayList<>()); - subMap.get(key).add(key + "@@@" + file.getExt() + "@@@" + file.getFileId()); + subs.add(file); } } if (item.getNextMarker().length() > 0) { - listFiles(parent, files, subMap, item.getNextMarker()); + listFiles(parent, files, subs, item.getNextMarker()); } for (Item folder : folders) { - listFiles(folder, files, subMap); + listFiles(folder, files, subs); } } @@ -324,18 +321,19 @@ public class API { return ""; } - private String findSubs(String name, Map> subMap) { - name = name.substring(0, name.lastIndexOf(".")); - List subs = subMap.get(name); - if (subs != null && subs.size() > 0) return combineSubs(subs); - StringBuilder sb = new StringBuilder(); - for (Map.Entry> entry : subMap.entrySet()) sb.append(combineSubs(entry.getValue())); - return sb.toString(); + private void pair(String name1, List items, List subs) { + for (Item item : items) { + String name2 = Utils.removeExt(item.getName()).toLowerCase(); + if (name1.contains(name2) || name2.contains(name1)) subs.add(item); + } } - private String combineSubs(List subs) { + private String findSubs(String name1, List items) { + List subs = new ArrayList<>(); + pair(Utils.removeExt(name1).toLowerCase(), items, subs); + if (subs.isEmpty()) subs.addAll(items); StringBuilder sb = new StringBuilder(); - for (String sub : subs) sb.append("+").append(sub); + for (Item sub : subs) sb.append("+").append(Utils.removeExt(sub.getName())).append("@@@").append(sub.getExt()).append("@@@").append(sub.getFileId()); return sb.toString(); }