From befbcd6720eef507fc71b327a97c2fff511e0604 Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 29 Dec 2016 21:50:26 +0800 Subject: [PATCH] Add fix thumb url --- .../java/com/hippo/ehviewer/Settings.java | 7 +++ .../java/com/hippo/ehviewer/client/EhUrl.java | 48 +++++++++++++++++++ .../client/parser/GalleryDetailParser.java | 14 +++++- app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rHK/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/eh_settings.xml | 5 ++ 8 files changed, 76 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index 2b76c4c69..12f20231e 100644 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -300,6 +300,13 @@ public class Settings { return getIntFromStr(KEY_THUMB_RESOLUTION, DEFAULT_THUMB_RESOLUTION); } + private static final String KEY_FIX_THUMB_URL = "fix_thumb_url"; + private static final boolean DEFAULT_FIX_THUMB_URL = false; + + public static boolean getFixThumbUrl() { + return getBoolean(KEY_FIX_THUMB_URL, DEFAULT_FIX_THUMB_URL); + } + private static final String KEY_SHOW_JPN_TITLE = "show_jpn_title"; private static final boolean DEFAULT_SHOW_JPN_TITLE = false; diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java index 04e0916a1..c2c13f53b 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java @@ -21,6 +21,11 @@ import android.support.annotation.NonNull; import com.hippo.ehviewer.Settings; import com.hippo.network.UrlBuilder; +import java.util.List; +import java.util.ListIterator; + +import okhttp3.HttpUrl; + public class EhUrl { public static final int SITE_G = 0; @@ -49,6 +54,9 @@ public class EhUrl { public static final String URL_FAVORITES_EX = HOST_EX + "favorites.php"; public static final String URL_FORUMS = "https://forums.e-hentai.org/"; + private static final String URL_PREFIX_THUMB_G = "http://ehgt.org/t/"; + private static final String URL_PREFIX_THUMB_EX = "http://exhentai.org/t/"; + public static String getGalleryDetailUrl(long gid, String token) { return getGalleryDetailUrl(gid, token, 0, false); } @@ -116,4 +124,44 @@ public class EhUrl { return URL_IMAGE_SEARCH_EX; } } + + public static String getThumbUrlPrefix() { + switch (Settings.getGallerySite()) { + default: + case SITE_G: + return URL_PREFIX_THUMB_G; + case SITE_EX: + return URL_PREFIX_THUMB_EX; + } + } + + public static String getFixedPreviewThumbUrl(String originUrl) { + HttpUrl url = HttpUrl.parse(originUrl); + if (url == null) return originUrl; + List pathSegments = url.pathSegments(); + if (pathSegments == null || pathSegments.size() < 3) return originUrl; + + ListIterator iterator = pathSegments.listIterator(pathSegments.size()); + // The last segments, like + // 317a1a254cd9c3269e71b2aa2671fe8d28c91097-260198-640-480-png_250.jpg + if (!iterator.hasPrevious()) return originUrl; + String lastSegment = iterator.previous(); + // The second last segments, like + // 7a + if (!iterator.hasPrevious()) return originUrl; + String secondLastSegment = iterator.previous(); + // The third last segments, like + // 31 + if (!iterator.hasPrevious()) return originUrl; + String thirdLastSegment = iterator.previous(); + // Check path segments + if (lastSegment != null && secondLastSegment != null + && thirdLastSegment != null + && lastSegment.startsWith(thirdLastSegment) + && lastSegment.startsWith(secondLastSegment, thirdLastSegment.length())) { + return getThumbUrlPrefix() + thirdLastSegment + "/" + secondLastSegment + "/" + lastSegment; + } else { + return originUrl; + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java index 8a9060e05..905eff0c1 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java @@ -20,6 +20,8 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; +import com.hippo.ehviewer.Settings; +import com.hippo.ehviewer.client.EhUrl; import com.hippo.ehviewer.client.EhUtils; import com.hippo.ehviewer.client.data.GalleryComment; import com.hippo.ehviewer.client.data.GalleryDetail; @@ -511,6 +513,9 @@ public class GalleryDetailParser { String pageUrl = element.attr("href"); element = element.child(0); String imageUrl = element.attr("src"); + if (Settings.getFixThumbUrl()) { + imageUrl = EhUrl.getFixedPreviewThumbUrl(imageUrl); + } int index = Integer.parseInt(element.attr("alt")) - 1; largePreviewSet.addItem(index, imageUrl, pageUrl); } @@ -529,8 +534,13 @@ public class GalleryDetailParser { LargePreviewSet largePreviewSet = new LargePreviewSet(); while (m.find()) { - largePreviewSet.addItem(ParserUtils.parseInt(m.group(2)) - 1, - ParserUtils.trim(m.group(3)), ParserUtils.trim(m.group(1))); + int index = ParserUtils.parseInt(m.group(2)) - 1; + String imageUrl = ParserUtils.trim(m.group(3)); + String pageUrl = ParserUtils.trim(m.group(1)); + if (Settings.getFixThumbUrl()) { + imageUrl = EhUrl.getFixedPreviewThumbUrl(imageUrl); + } + largePreviewSet.addItem(index, imageUrl, pageUrl); } if (largePreviewSet.size() == 0) { diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 2bc76f617..a541648d7 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -373,6 +373,7 @@ 缩略图分辨率 %s,指定分辨率可能使获取缩略图失败 自动 + 修正缩略图链接 主页分类显示 默认在主页所显示的分类 排除标签组 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 9ecf1ea64..63db9985a 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -373,6 +373,7 @@ 縮略圖分辨率 %s,指定分辨率可能使獲取縮略圖失敗 自動 + 修正縮略圖鏈接 主頁分類顯示 默認在主頁所顯示的分類 排除標籤組 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index f1ca541cb..ae2ea4ac9 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -373,6 +373,7 @@ 縮圖解析度 %s,指定解析度可能使獲取縮圖失敗 自動 + 修正縮圖連結 主頁分類顯示 預設在主頁所顯示的分類 排除標籤組 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1dce614d3..82f1d9d62 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -416,6 +416,7 @@ Thumb resolution %s, special resolutions might cause getting thumb failed Auto + Fix thumb url Categories on Homepage The categories shown as default on Homepage Excluded languages diff --git a/app/src/main/res/xml/eh_settings.xml b/app/src/main/res/xml/eh_settings.xml index c634dbbc1..7c79a0969 100644 --- a/app/src/main/res/xml/eh_settings.xml +++ b/app/src/main/res/xml/eh_settings.xml @@ -64,6 +64,11 @@ app:entryValues="@array/thumb_resolution_entry_values" android:defaultValue="0"/> + +