From 89209a3c44de764eced6944fe0edeed50c7fd82f Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 19 Mar 2019 23:02:08 +0800 Subject: [PATCH] Don't call API if all data is got --- .../com/hippo/ehviewer/client/EhEngine.java | 146 +++++++----------- .../com/hippo/ehviewer/client/EhFilter.java | 2 +- 2 files changed, 57 insertions(+), 91 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java index 97fae574e..c6fcddda3 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java @@ -173,6 +173,58 @@ public class EhEngine { } } + private static void fillGalleryList(@Nullable EhClient.Task task, OkHttpClient okHttpClient, List list, String url, boolean filter) throws Throwable { + // Filter title and uploader + if (filter) { + for (int i = 0, n = list.size(); i < n; i++) { + GalleryInfo info = list.get(i); + if (!sEhFilter.filterTitle(info) || !sEhFilter.filterUploader(info)) { + list.remove(i); + i--; + n--; + } + } + } + + boolean hasTags = false; + boolean hasPages = false; + boolean hasRated = false; + for (GalleryInfo gi : list) { + if (gi.simpleTags != null) { + hasTags = true; + } + if (gi.pages != 0) { + hasPages = true; + } + if (gi.rated) { + hasRated = true; + } + } + + boolean needApi = (filter && sEhFilter.needTags() && !hasTags) || + (Settings.getShowGalleryPages() && !hasPages) || + hasRated; + if (needApi) { + fillGalleryListByApi(task, okHttpClient, list, url); + } + + // Filter tag + if (filter) { + for (int i = 0, n = list.size(); i < n; i++) { + GalleryInfo info = list.get(i); + if (!sEhFilter.filterTag(info) || !sEhFilter.filterTagNamespace(info)) { + list.remove(i); + i--; + n--; + } + } + } + + for (GalleryInfo info : list) { + info.thumb = EhUrl.getFixedPreviewThumbUrl(info.thumb); + } + } + public static GalleryListParser.Result getGalleryList(@Nullable EhClient.Task task, OkHttpClient okHttpClient, String url) throws Throwable { String referer = EhUrl.getReferer(); @@ -201,50 +253,7 @@ public class EhEngine { throw e; } - // Filter title and uploader - List list = result.galleryInfoList; - for (int i = 0, n = list.size(); i < n; i++) { - GalleryInfo info = list.get(i); - if (!sEhFilter.filterTitle(info) || !sEhFilter.filterUploader(info)) { - list.remove(i); - i--; - n--; - } - } - - boolean anyRated = false; - for (GalleryInfo info : list) { - if (info.rated) { - anyRated = true; - break; - } - } - - boolean needFillByApi = list.size() > 0 - && (TextUtils.isEmpty(list.get(0).uploader) - || anyRated - || Settings.getShowJpnTitle() - || Settings.getShowGalleryPages() - || sEhFilter.needCallApi()); - - if (needFillByApi) { - // Fill by api - fillGalleryListByApi(task, okHttpClient, list, url); - - // Filter tag - for (int i = 0, n = list.size(); i < n; i++) { - GalleryInfo info = list.get(i); - if (!sEhFilter.filterTag(info) || !sEhFilter.filterTagNamespace(info)) { - list.remove(i); - i--; - n--; - } - } - } - - for (GalleryInfo info : list) { - info.thumb = EhUrl.getFixedPreviewThumbUrl(info.thumb); - } + fillGalleryList(task, okHttpClient, result.galleryInfoList, url, true); return result; } @@ -511,15 +520,7 @@ public class EhEngine { throw e; } - List list = result.galleryInfoList; - - if (list.size() > 0 && (TextUtils.isEmpty(list.get(0).uploader) || Settings.getShowJpnTitle() || Settings.getShowGalleryPages())) { - fillGalleryListByApi(task, okHttpClient, list, url); - } - - for (GalleryInfo info : list) { - info.thumb = EhUrl.getFixedPreviewThumbUrl(info.thumb); - } + fillGalleryList(task, okHttpClient, result.galleryInfoList, url, false); return result; } @@ -628,14 +629,7 @@ public class EhEngine { throw e; } - List list = result.galleryInfoList; - if (list.size() > 0 && (TextUtils.isEmpty(list.get(0).uploader) || Settings.getShowJpnTitle() || Settings.getShowGalleryPages())) { - fillGalleryListByApi(task, okHttpClient, list, url); - } - - for (GalleryInfo info : list) { - info.thumb = EhUrl.getFixedPreviewThumbUrl(info.thumb); - } + fillGalleryList(task, okHttpClient, result.galleryInfoList, url, false); return result; } @@ -911,35 +905,7 @@ public class EhEngine { throw e; } - // Filter title and uploader - List list = result.galleryInfoList; - for (int i = 0, n = list.size(); i < n; i++) { - GalleryInfo info = list.get(i); - if (!sEhFilter.filterTitle(info) || !sEhFilter.filterUploader(info)) { - list.remove(i); - i--; - n--; - } - } - - if (list.size() > 0 && (TextUtils.isEmpty(list.get(0).uploader) || Settings.getShowJpnTitle() || Settings.getShowGalleryPages() || sEhFilter.needCallApi())) { - // Fill by api - fillGalleryListByApi(task, okHttpClient, list, url); - - // Filter tag - for (int i = 0, n = list.size(); i < n; i++) { - GalleryInfo info = list.get(i); - if (!sEhFilter.filterTag(info) || !sEhFilter.filterTagNamespace(info)) { - list.remove(i); - i--; - n--; - } - } - } - - for (GalleryInfo info : list) { - info.thumb = EhUrl.getFixedPreviewThumbUrl(info.thumb); - } + fillGalleryList(task, okHttpClient, result.galleryInfoList, url, true); return result; } diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhFilter.java b/app/src/main/java/com/hippo/ehviewer/client/EhFilter.java index def6b062b..107bcfa5a 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhFilter.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhFilter.java @@ -144,7 +144,7 @@ public final class EhFilter { } } - public synchronized boolean needCallApi() { + public synchronized boolean needTags() { return 0 != mTagFilterList.size() || 0 != mTagNamespaceFilterList.size(); }