diff --git a/app/src/main/java/com/github/catvod/bean/alist/Item.java b/app/src/main/java/com/github/catvod/bean/alist/Item.java index f16b574e..1f6b86d4 100644 --- a/app/src/main/java/com/github/catvod/bean/alist/Item.java +++ b/app/src/main/java/com/github/catvod/bean/alist/Item.java @@ -18,6 +18,8 @@ public class Item { @SerializedName("name") private String name; + @SerializedName("path") + private String path; @SerializedName("type") private int type; @SerializedName("size") @@ -39,7 +41,11 @@ public class Item { } public String getName() { - return name; + return TextUtils.isEmpty(name) ? "" : name; + } + + public String getPath() { + return TextUtils.isEmpty(path) ? "" : path; } public int getType() { @@ -85,7 +91,7 @@ public class Item { } public String getVodId(String id) { - return id + "/" + getName(); + return id + getPath() + "/" + getName(); } public String getPic() { diff --git a/app/src/main/java/com/github/catvod/demo/MainActivity.java b/app/src/main/java/com/github/catvod/demo/MainActivity.java index 3bd86f21..c952993d 100644 --- a/app/src/main/java/com/github/catvod/demo/MainActivity.java +++ b/app/src/main/java/com/github/catvod/demo/MainActivity.java @@ -14,7 +14,7 @@ public class MainActivity extends Activity { setContentView(R.layout.activity_main); Init.init(getApplicationContext()); new Thread(() -> { - + }).start(); } } \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/AList.java b/app/src/main/java/com/github/catvod/spider/AList.java index 8fd55b4c..3b8cdc34 100644 --- a/app/src/main/java/com/github/catvod/spider/AList.java +++ b/app/src/main/java/com/github/catvod/spider/AList.java @@ -59,9 +59,9 @@ public class AList extends Spider { } } - private boolean v3(String name) { - if (!map.containsKey(name)) map.put(name, OkHttpUtil.string(ext.get(name) + "/api/public/settings").contains("v3.") ? "3" : "2"); - return Objects.equals(map.get(name), "3"); + private boolean v3(String key) { + if (!map.containsKey(key)) map.put(key, OkHttpUtil.string(ext.get(key) + "/api/public/settings").contains("v3.") ? "3" : "2"); + return Objects.equals(map.get(key), "3"); } private List getFilter() { @@ -87,7 +87,7 @@ public class AList extends Spider { public String homeContent(boolean filter) { List classes = new ArrayList<>(); LinkedHashMap> filters = new LinkedHashMap<>(); - for (String entry : ext.keySet()) classes.add(new Class(entry, entry, "1")); + for (String key : ext.keySet()) classes.add(new Class(key, key, "1")); for (Class item : classes) filters.put(item.getTypeId(), getFilter()); return Result.string(classes, filters); } @@ -126,12 +126,37 @@ public class AList extends Spider { return Result.string(vod); } + @Override + public String searchContent(String keyword, boolean quick) throws Exception { + List list = new ArrayList<>(); + JSONObject params = new JSONObject(); + params.put("path", "/"); + params.put("keyword", keyword); + for (String key : ext.keySet()) list.addAll(getList(params.toString(), key)); + return Result.string(list); + } + @Override public String playerContent(String flag, String id, List vipFlags) { String[] ids = id.split("\\+"); return Result.get().url(ids[0]).sub(getSub(ids)).string(); } + private List getList(String param, String key) { + try { + if (v3(key)) return Collections.emptyList(); + List list = new ArrayList<>(); + String url = ext.get(key) + "/api/public/search"; + String response = OkHttpUtil.postJson(url, param); + String json = new JSONObject(response).getJSONArray("data").toString(); + List items = Item.arrayFrom(json); + for (Item item : items) if (!item.isFolder() && !item.ignore(false)) list.add(item.getVod(key)); + return list; + } catch (Exception e) { + return Collections.emptyList(); + } + } + private List getList(String id, boolean filter) { try { String key = id.contains("/") ? id.substring(0, id.indexOf("/")) : id; diff --git a/app/src/main/java/com/github/catvod/spider/Ali.java b/app/src/main/java/com/github/catvod/spider/Ali.java index e01b0381..ef46b6df 100644 --- a/app/src/main/java/com/github/catvod/spider/Ali.java +++ b/app/src/main/java/com/github/catvod/spider/Ali.java @@ -28,7 +28,6 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -45,6 +44,7 @@ public class Ali { private static String accessToken; private String refreshToken; private ImageView view; + private int index; public Ali(String token) { if (TextUtils.isEmpty(token)) Init.show("尚未設定 Token"); @@ -131,32 +131,32 @@ public class Ali { listFiles(folder, name2id, subMap, shareId, shareToken, ""); } - private void listFiles(Item folder, LinkedHashMap name2id, Map> subMap, String shareId, String shareToken, String marker) throws Exception { + private void listFiles(Item parent, LinkedHashMap name2id, Map> subMap, String shareId, String shareToken, String marker) throws Exception { JSONObject body = new JSONObject(); - body.put("limit", 200); + List folders = new ArrayList<>(); + body.put("limit", 1000); body.put("share_id", shareId); - body.put("parent_file_id", folder.getFileId()); + body.put("parent_file_id", parent.getFileId()); body.put("order_by", "name"); body.put("order_direction", "ASC"); if (marker.length() > 0) body.put("marker", marker); Item item = Item.objectFrom(post("adrive/v3/file/list", body, shareToken)); for (Item file : item.getItems()) { if (file.getType().equals("folder")) { - listFiles(file, name2id, subMap, shareId, shareToken); - continue; - } - if (file.getCategory().equals("video")) { - name2id.put(folder.getDisplayName(file.getName()), shareId + "+" + shareToken + "+" + file.getFileId()); - continue; - } - if (Misc.isSub(file.getExt())) { - String name = file.removeExt(); - if (!subMap.containsKey(name)) subMap.put(name, new ArrayList<>()); - Objects.requireNonNull(subMap.get(name)).add(name + "@" + file.getFileId() + "@" + file.getExt()); + folders.add(file); + } else if (file.getCategory().equals("video") || file.getCategory().equals("audio")) { + name2id.put(parent.getDisplayName(file.getName()), shareId + "+" + shareToken + "+" + file.getFileId()); + } else if (Misc.isSub(file.getExt())) { + String key = file.removeExt(); + if (!subMap.containsKey(key)) subMap.put(key, new ArrayList<>()); + subMap.get(key).add(key + "@" + file.getFileId() + "@" + file.getExt()); } } if (item.getNextMarker().length() > 0) { - listFiles(folder, name2id, subMap, shareId, shareToken, item.getNextMarker()); + listFiles(parent, name2id, subMap, shareId, shareToken, item.getNextMarker()); + } + for (Item folder : folders) { + listFiles(folder, name2id, subMap, shareId, shareToken); } } diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 239f7419..b12e014b 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index 267fb34e..e85d6e67 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -e1ce4a638a2dbef8dd09c6ce07ba7da1 +cc6114eb6329d36b474f86b7c4830ff8