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 ecedced4..f16b574e 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 @@ -51,7 +51,7 @@ public class Item { } public String getThumb() { - return thumb; + return TextUtils.isEmpty(thumb) ? "" : thumb; } public String getUrl() { @@ -75,24 +75,17 @@ public class Item { return getType() == 1; } - public boolean isMedia() { - return getType() == 2 || getType() == 3 || getType() == 4 || getType() == 6; - } - - public boolean isSub() { - return getType() == 5 && Misc.isSub(getExt()); - } - - public boolean ignore() { - return !isFolder() && !isMedia() && !isSub(); + public boolean ignore(boolean v3) { + if (v3) return getType() == 0 || getType() == 4; + return getType() == 0 || getType() == 2 || getType() == 5; } public String getExt() { return getName().substring(getName().lastIndexOf(".") + 1); } - public String getVodId(String tid) { - return tid + "/" + getName(); + public String getVodId(String id) { + return id + "/" + getName(); } public String getPic() { @@ -107,7 +100,7 @@ public class Item { return isFolder() ? "folder" : "file"; } - public Vod getVod(String tid) { - return new Vod(getVodId(tid), getName(), getPic(), getRemark(), getVodTag()); + public Vod getVod(String id) { + return new Vod(getVodId(id), getName(), getPic(), getRemark(), getVodTag()); } } 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 9a7cb9b3..7f18aab3 100644 --- a/app/src/main/java/com/github/catvod/spider/AList.java +++ b/app/src/main/java/com/github/catvod/spider/AList.java @@ -1,7 +1,6 @@ package com.github.catvod.spider; import android.content.Context; -import android.text.TextUtils; import com.github.catvod.bean.Class; import com.github.catvod.bean.Filter; @@ -22,6 +21,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -30,7 +30,6 @@ import java.util.Objects; public class AList extends Spider { private LinkedHashMap ext; - private Map> sub; private Map map; private boolean isJson(String json) { @@ -59,9 +58,9 @@ public class AList extends Spider { } } - private String getVersion(String name) { + 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 map.get(name); + return Objects.equals(map.get(name), "3"); } private List getFilter() { @@ -74,7 +73,6 @@ public class AList extends Spider { @Override public void init(Context context, String extend) { try { - sub = new HashMap<>(); map = new HashMap<>(); ext = new LinkedHashMap<>(); if (extend.startsWith("http")) extend = OkHttpUtil.string(extend); @@ -100,11 +98,8 @@ public class AList extends Spider { List folders = new ArrayList<>(); List files = new ArrayList<>(); List list = new ArrayList<>(); - sub.clear(); - for (Item item : getList(tid)) { - if (item.ignore()) continue; - if (item.isSub()) addSub(tid, item); - else if (item.isFolder()) folders.add(item); + for (Item item : getList(tid, true)) { + if (item.isFolder()) folders.add(item); else files.add(item); } Sorter.sort(type, order, folders); @@ -116,15 +111,17 @@ public class AList extends Spider { @Override public String detailContent(List ids) { - String tid = ids.get(0); - Item item = getDetail(tid); + String id = ids.get(0); + Item item = getDetail(id); + String path = id.substring(0, id.lastIndexOf("/")); + List parents = getList(path, false); Vod vod = new Vod(); - vod.setVodId(item.getVodId(tid)); + vod.setVodId(item.getVodId(id)); vod.setVodName(item.getName()); vod.setVodPic(item.getPic()); vod.setVodTag(item.getVodTag()); vod.setVodPlayFrom("播放"); - vod.setVodPlayUrl(item.getName() + "$" + item.getUrl() + findSubs(item.getName())); + vod.setVodPlayUrl(item.getName() + "$" + item.getUrl() + findSubs(path, parents)); return Result.string(vod); } @@ -134,56 +131,42 @@ public class AList extends Spider { return Result.get().url(ids[0]).sub(getSub(ids)).string(); } - private List getList(String tid) { + private List getList(String id, boolean filter) { try { - String key = tid.contains("/") ? tid.substring(0, tid.indexOf("/")) : tid; - String path = tid.contains("/") ? tid.substring(tid.indexOf("/") + 1) : ""; - boolean v3 = getVersion(key).equals("3"); - String url = ext.get(key) + (v3 ? "/api/fs/list" : "/api/public/path"); + String key = id.contains("/") ? id.substring(0, id.indexOf("/")) : id; + String path = id.contains("/") ? id.substring(id.indexOf("/") + 1) : ""; + String url = ext.get(key) + (v3(key) ? "/api/fs/list" : "/api/public/path"); JSONObject params = new JSONObject(); params.put("path", path); String response = OkHttpUtil.postJson(url, params.toString()); - String json = new JSONObject(response).getJSONObject("data").getJSONArray(v3 ? "content" : "files").toString(); - return Item.arrayFrom(json); + String json = new JSONObject(response).getJSONObject("data").getJSONArray(v3(key) ? "content" : "files").toString(); + List items = Item.arrayFrom(json); + Iterator iterator = items.iterator(); + if (filter) while (iterator.hasNext()) if (iterator.next().ignore(v3(key))) iterator.remove(); + return items; } catch (Exception e) { return Collections.emptyList(); } } - private Item getDetail(String tid) { + private Item getDetail(String id) { try { - String key = tid.contains("/") ? tid.substring(0, tid.indexOf("/")) : tid; - String path = tid.contains("/") ? tid.substring(tid.indexOf("/") + 1) : ""; - boolean v3 = getVersion(key).equals("3"); - String url = ext.get(key) + (v3 ? "/api/fs/get" : "/api/public/path"); + String key = id.contains("/") ? id.substring(0, id.indexOf("/")) : id; + String path = id.contains("/") ? id.substring(id.indexOf("/") + 1) : ""; + String url = ext.get(key) + (v3(key) ? "/api/fs/get" : "/api/public/path"); JSONObject params = new JSONObject(); params.put("path", path); String response = OkHttpUtil.postJson(url, params.toString()); - String json = v3 ? new JSONObject(response).getJSONObject("data").toString() : new JSONObject(response).getJSONObject("data").getJSONArray("files").getJSONObject(0).toString(); + String json = v3(key) ? new JSONObject(response).getJSONObject("data").toString() : new JSONObject(response).getJSONObject("data").getJSONArray("files").getJSONObject(0).toString(); return Item.objectFrom(json); } catch (Exception e) { return new Item(); } } - private void addSub(String tid, Item item) { - String name = item.getName().substring(0, item.getName().lastIndexOf(".")); - if (!sub.containsKey(name)) sub.put(name, new ArrayList<>()); - Objects.requireNonNull(sub.get(name)).add(item.getName() + "@" + item.getVodId(tid) + "@" + item.getExt()); - } - - private String findSubs(String name) { - name = name.substring(0, name.lastIndexOf(".")); - List subs = sub.get(name); - if (subs != null && subs.size() > 0) return combineSubs(subs); + private String findSubs(String path, List items) { StringBuilder sb = new StringBuilder(); - for (Map.Entry> entry : sub.entrySet()) sb.append(combineSubs(entry.getValue())); - return sb.toString(); - } - - private String combineSubs(List subs) { - StringBuilder sb = new StringBuilder(); - for (String sub : subs) sb.append("+").append(sub); + for (Item item : items) if (Misc.isSub(item.getExt())) sb.append("+").append(item.getName()).append("@").append(Misc.getSubMimeType(item.getExt())).append("@").append(item.getVodId(path)); return sb.toString(); } @@ -192,9 +175,7 @@ public class AList extends Spider { for (String text : ids) { if (!text.contains("@")) continue; String[] arr = text.split("@"); - String url = getDetail(arr[1]).getUrl(); - if (TextUtils.isEmpty(url)) continue; - sb.append(arr[0]).append("#").append(Misc.getSubMimeType(arr[2])).append("#").append(url).append("$$$"); + sb.append(arr[0]).append("#").append(arr[1]).append("#").append(getDetail(arr[2]).getUrl()).append("$$$"); } return Misc.substring(sb.toString(), 3); } diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 8695006a..4c9612c2 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 70d7ac8e..637f9dd1 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -82ac30fa9aa78a5bf9fae055bab78191 +c3bc29415e53fe4742d9a90bd148fa55