Update ali subs find rule

This commit is contained in:
FongMi 2023-05-25 21:48:49 +08:00
parent fccb62d029
commit 35a29c8317
1 changed files with 19 additions and 21 deletions

View File

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