diff --git a/app/src/main/java/com/github/catvod/bean/alist/Drive.java b/app/src/main/java/com/github/catvod/bean/alist/Drive.java index 06f402b..d7991d3 100644 --- a/app/src/main/java/com/github/catvod/bean/alist/Drive.java +++ b/app/src/main/java/com/github/catvod/bean/alist/Drive.java @@ -35,6 +35,8 @@ public class Drive { private String path; @SerializedName("token") private String token; + @SerializedName("search") + private Boolean search; public static Drive objectFrom(String str) { return new Gson().fromJson(str, Drive.class); @@ -92,6 +94,10 @@ public class Drive { this.token = token; } + public Boolean search() { + return search == null || search; + } + public boolean isNew() { return getVersion() == 3; } 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 e6d244a..b06aee7 100644 --- a/app/src/main/java/com/github/catvod/spider/AList.java +++ b/app/src/main/java/com/github/catvod/spider/AList.java @@ -25,7 +25,11 @@ import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; -import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; public class AList extends Spider { @@ -130,9 +134,10 @@ public class AList extends Spider { public String searchContent(String keyword, boolean quick) throws Exception { fetchRule(); List list = new ArrayList<>(); - CountDownLatch cd = new CountDownLatch(drives.size()); - for (Drive drive : drives) new Thread(() -> search(cd, list, drive.check(), keyword)).start(); - cd.await(); + List jobs = new ArrayList<>(); + ExecutorService executor = Executors.newCachedThreadPool(); + for (Drive drive : drives) if (drive.search()) jobs.add(new Job(drive.check(), keyword)); + for (Future> future : executor.invokeAll(jobs, 15, TimeUnit.SECONDS)) list.addAll(future.get()); return Result.string(list); } @@ -191,17 +196,6 @@ public class AList extends Spider { } } - private void search(CountDownLatch cd, List list, Drive drive, String keyword) { - try { - String response = post(drive, drive.searchApi(), drive.params(keyword)); - List items = Item.arrayFrom(getSearchJson(drive.isNew(), response)); - for (Item item : items) if (!item.ignore(drive.isNew())) list.add(item.getVod(drive, vodPic)); - } catch (Exception ignored) { - } finally { - cd.countDown(); - } - } - private String getListJson(boolean isNew, String response) throws Exception { if (isNew) { return new JSONObject(response).getJSONObject("data").getJSONArray("content").toString(); @@ -244,4 +238,24 @@ public class AList extends Spider { } return sub; } + + class Job implements Callable> { + + private final Drive drive; + private final String keyword; + + public Job(Drive drive, String keyword) { + this.drive = drive; + this.keyword = keyword; + } + + @Override + public List call() throws Exception { + List list = new ArrayList<>(); + String response = post(drive, drive.searchApi(), drive.params(keyword)); + List items = Item.arrayFrom(getSearchJson(drive.isNew(), response)); + for (Item item : items) if (!item.ignore(drive.isNew())) list.add(item.getVod(drive, vodPic)); + return list; + } + } } \ No newline at end of file diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 890e9fb..edc7618 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 749a2ab..cb0546f 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -3e353d2564e6293da3520b21fb2867d9 +74d87fdc0c6bfaf5fadc846b41ad2ef5