diff --git a/app/src/main/java/com/github/catvod/bean/ali/Item.java b/app/src/main/java/com/github/catvod/bean/ali/Item.java index 216515f2..05a5fdb6 100644 --- a/app/src/main/java/com/github/catvod/bean/ali/Item.java +++ b/app/src/main/java/com/github/catvod/bean/ali/Item.java @@ -2,25 +2,77 @@ package com.github.catvod.bean.ali; import android.text.TextUtils; +import com.google.gson.Gson; +import com.google.gson.annotations.SerializedName; + +import java.util.Collections; +import java.util.List; + public class Item { - private String id; + @SerializedName("items") + private List items; + @SerializedName("next_marker") + private String nextMarker; + + @SerializedName("file_id") + private String fileId; + @SerializedName("share_id") + private String shareId; + @SerializedName("name") private String name; + @SerializedName("type") + private String type; + @SerializedName("file_extension") + private String fileExtension; + @SerializedName("category") + private String category; - public Item(String id) { - this.id = id; + public static Item objectFrom(String str) { + return new Gson().fromJson(str, Item.class); } - public Item(String id, String name) { - this.id = id; - this.name = name; + public Item(String fileId) { + this.fileId = fileId; } - public String getId() { - return id; + public List getItems() { + return items == null ? Collections.emptyList() : items; } - public String getName(String fileName) { - return TextUtils.isEmpty(name) ? fileName : "[" + name + "] " + fileName; + public String getNextMarker() { + return TextUtils.isEmpty(nextMarker) ? "" : nextMarker; + } + + public String getFileId() { + return TextUtils.isEmpty(fileId) ? "" : fileId; + } + + public String getShareId() { + return TextUtils.isEmpty(shareId) ? "" : shareId; + } + + public String getName() { + return TextUtils.isEmpty(name) ? "" : name; + } + + public String getType() { + return TextUtils.isEmpty(type) ? "" : type; + } + + public String getExt() { + return TextUtils.isEmpty(fileExtension) ? "" : fileExtension; + } + + public String getCategory() { + return TextUtils.isEmpty(category) ? "" : category; + } + + public String getDisplayName(String fileName) { + return getName().isEmpty() ? fileName : "[" + getName() + "] " + fileName; + } + + public String removeExt() { + return getName().indexOf(".") > 0 ? getName().substring(0, getName().lastIndexOf(".")) : getName(); } } 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 617a17e6..e01b0381 100644 --- a/app/src/main/java/com/github/catvod/spider/Ali.java +++ b/app/src/main/java/com/github/catvod/spider/Ali.java @@ -128,35 +128,36 @@ public class Ali { } private void listFiles(Item folder, LinkedHashMap name2id, Map> subMap, String shareId, String shareToken) throws Exception { + listFiles(folder, name2id, subMap, shareId, shareToken, ""); + } + + private void listFiles(Item folder, LinkedHashMap name2id, Map> subMap, String shareId, String shareToken, String marker) throws Exception { JSONObject body = new JSONObject(); - body.put("share_id", shareId); - body.put("parent_file_id", folder.getId()); body.put("limit", 200); + body.put("share_id", shareId); + body.put("parent_file_id", folder.getFileId()); body.put("order_by", "name"); body.put("order_direction", "ASC"); - String json = post("adrive/v3/file/list", body, shareToken); - JSONArray items = new JSONObject(json).getJSONArray("items"); - for (int j = 0; j < items.length(); ++j) { - JSONObject item = items.getJSONObject(j); - String type = item.optString("type"); - String name = item.optString("name"); - String fileId = item.optString("file_id"); - String category = item.optString("category", ""); - String ext = item.optString("file_extension", ""); - if (type.equals("folder")) { - listFiles(new Item(fileId, name), name2id, subMap, shareId, shareToken); + 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 (category.equals("video")) { - name2id.put(folder.getName(name), shareId + "+" + shareToken + "+" + fileId); + if (file.getCategory().equals("video")) { + name2id.put(folder.getDisplayName(file.getName()), shareId + "+" + shareToken + "+" + file.getFileId()); continue; } - if (Misc.isSub(ext)) { - name = name.replace("." + ext, ""); + 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 + "@" + fileId + "@" + ext); + Objects.requireNonNull(subMap.get(name)).add(name + "@" + file.getFileId() + "@" + file.getExt()); } } + if (item.getNextMarker().length() > 0) { + listFiles(folder, name2id, subMap, shareId, shareToken, item.getNextMarker()); + } } private String getParentFileId(String fileId, JSONObject shareInfo) throws Exception { diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index b88ad4f4..239f7419 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 efe7bf5b..267fb34e 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -bc6e5b7707f34cfff705465420176d2f +e1ce4a638a2dbef8dd09c6ce07ba7da1