Add download origin image
This commit is contained in:
1 parent
43df2a5887
commit
bbceb4e493
8 files changed
+73
-19
No files matched your search
@@ -540,6 +540,17 @@ public class Settings {
|
||||
putIntToStr(KEY_PRELOAD_IMAGE, value);
|
||||
}
|
||||
|
||||
private static final String KEY_DOWNLOAD_ORIGIN_IMAGE = "download_origin_image";
|
||||
private static final boolean DEFAULT_DOWNLOAD_ORIGIN_IMAGE = false;
|
||||
|
||||
public static boolean getDownloadOriginImage() {
|
||||
return getBoolean(KEY_DOWNLOAD_ORIGIN_IMAGE, DEFAULT_DOWNLOAD_ORIGIN_IMAGE);
|
||||
}
|
||||
|
||||
public static void putDownloadOriginImage(boolean value) {
|
||||
putBoolean(KEY_DOWNLOAD_ORIGIN_IMAGE, value);
|
||||
}
|
||||
|
||||
/********************
|
||||
****** Favorites
|
||||
********************/
|
||||
|
||||
@@ -19,25 +19,31 @@ package com.hippo.ehviewer.client.parser;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.hippo.ehviewer.client.exception.ParseException;
|
||||
import com.hippo.yorozuya.StringUtils;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class GalleryPageParser {
|
||||
|
||||
private static final Pattern IMAGE_URL_PATTERN = Pattern.compile("<div id=\"i3\"><a[^>]+><img id=\"img\" src=\"([^\"]+)\"");
|
||||
private static final Pattern SKIP_HATH_KEY_PATTERN = Pattern.compile("onclick=\"return nl\\('([^\\)]+)'\\)");
|
||||
private static final Pattern PATTERN_IMAGE_URL = Pattern.compile("<div id=\"i3\"><a[^>]+><img id=\"img\" src=\"([^\"]+)\"");
|
||||
private static final Pattern PATTERN_SKIP_HATH_KEY = Pattern.compile("onclick=\"return nl\\('([^\\)]+)'\\)");
|
||||
private static final Pattern PATTERN_ORIGIN_IMAGE_URL = Pattern.compile("<div id=\"i7\" class=\"if\"> <img[^>]+/> <a href=\"([^\"]+)\">");
|
||||
|
||||
public static Result parse(String body) throws ParseException {
|
||||
Matcher m;
|
||||
Result result = new Result();
|
||||
m = IMAGE_URL_PATTERN.matcher(body);
|
||||
m = PATTERN_IMAGE_URL.matcher(body);
|
||||
if (m.find()) {
|
||||
result.imageUrl = ParserUtils.trim(m.group(1));
|
||||
result.imageUrl = StringUtils.unescapeXml(StringUtils.trim(m.group(1)));
|
||||
}
|
||||
m = SKIP_HATH_KEY_PATTERN.matcher(body);
|
||||
m = PATTERN_SKIP_HATH_KEY.matcher(body);
|
||||
if (m.find()) {
|
||||
result.skipHathKey = ParserUtils.trim(m.group(1));
|
||||
result.skipHathKey = StringUtils.unescapeXml(StringUtils.trim(m.group(1)));
|
||||
}
|
||||
m = PATTERN_ORIGIN_IMAGE_URL.matcher(body);
|
||||
if (m.find()) {
|
||||
result.originImageUrl = StringUtils.unescapeXml(StringUtils.trim(m.group(1)));
|
||||
}
|
||||
if (!TextUtils.isEmpty(result.imageUrl) && !TextUtils.isEmpty(result.skipHathKey)) {
|
||||
return result;
|
||||
@@ -49,5 +55,6 @@ public class GalleryPageParser {
|
||||
public static class Result {
|
||||
public String imageUrl;
|
||||
public String skipHathKey;
|
||||
public String originImageUrl;
|
||||
}
|
||||
}
|
||||
@@ -24,6 +24,7 @@ import android.support.annotation.IntDef;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.UiThread;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import android.webkit.MimeTypeMap;
|
||||
@@ -52,6 +53,7 @@ import com.hippo.yorozuya.OSUtils;
|
||||
import com.hippo.yorozuya.PriorityThread;
|
||||
import com.hippo.yorozuya.PriorityThreadFactory;
|
||||
import com.hippo.yorozuya.StringUtils;
|
||||
import com.hippo.yorozuya.Utilities;
|
||||
import com.hippo.yorozuya.io.InputStreamPipe;
|
||||
import com.hippo.yorozuya.io.OutputStreamPipe;
|
||||
import com.hippo.yorozuya.sparse.SparseJLArray;
|
||||
@@ -72,6 +74,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import okhttp3.Call;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
@@ -1015,7 +1018,11 @@ public class SpiderQueen implements Runnable {
|
||||
break;
|
||||
}
|
||||
|
||||
imageUrl = result.imageUrl;
|
||||
if (Settings.getDownloadOriginImage() && !TextUtils.isEmpty(result.originImageUrl)) {
|
||||
imageUrl = result.originImageUrl;
|
||||
} else {
|
||||
imageUrl = result.imageUrl;
|
||||
}
|
||||
skipHathKey = result.skipHathKey;
|
||||
|
||||
// If it is force request, skip first image
|
||||
@@ -1027,28 +1034,40 @@ public class SpiderQueen implements Runnable {
|
||||
Log.d(TAG, imageUrl);
|
||||
}
|
||||
|
||||
// Start download image
|
||||
OutputStreamPipe pipe = mSpiderDen.openOutputStreamPipe(
|
||||
index, MimeTypeMap.getFileExtensionFromUrl(imageUrl));
|
||||
if (pipe == null) {
|
||||
// Can't get pipe
|
||||
error = GetText.getString(R.string.error_write_failed);
|
||||
break;
|
||||
}
|
||||
|
||||
// Download image
|
||||
OutputStreamPipe pipe = null;
|
||||
InputStream is = null;
|
||||
try {
|
||||
if (DEBUG_LOG) {
|
||||
Log.d(TAG, "Start download image " + index);
|
||||
}
|
||||
|
||||
Response response = mHttpClient.newCall(new EhRequestBuilder(imageUrl).build()).execute();
|
||||
Call call = mHttpClient.newCall(new EhRequestBuilder(imageUrl).build());
|
||||
Response response = call.execute();
|
||||
if (response.code() >= 400) {
|
||||
// Maybe 404
|
||||
call.cancel();
|
||||
continue;
|
||||
}
|
||||
ResponseBody responseBody = response.body();
|
||||
|
||||
// Get extension
|
||||
String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(
|
||||
responseBody.contentType().toString());
|
||||
// Ensure extension
|
||||
if (!Utilities.contain(GalleryProvider.SUPPORT_IMAGE_EXTENSIONS, extension)) {
|
||||
extension = GalleryProvider.SUPPORT_IMAGE_EXTENSIONS[0];
|
||||
}
|
||||
|
||||
// Get out put pipe
|
||||
pipe = mSpiderDen.openOutputStreamPipe(index, extension);
|
||||
if (null == pipe) {
|
||||
// Can't get pipe
|
||||
error = GetText.getString(R.string.error_write_failed);
|
||||
call.cancel();
|
||||
break;
|
||||
}
|
||||
|
||||
long contentLength = responseBody.contentLength();
|
||||
is = responseBody.byteStream();
|
||||
pipe.obtain();
|
||||
@@ -1060,6 +1079,7 @@ public class SpiderQueen implements Runnable {
|
||||
while (!Thread.currentThread().isInterrupted()) {
|
||||
int bytesRead = is.read(data);
|
||||
if (bytesRead == -1) {
|
||||
call.cancel();
|
||||
break;
|
||||
}
|
||||
os.write(data, 0, bytesRead);
|
||||
@@ -1090,8 +1110,10 @@ public class SpiderQueen implements Runnable {
|
||||
error = GetText.getString(R.string.error_socket);
|
||||
} finally {
|
||||
IOUtils.closeQuietly(is);
|
||||
pipe.close();
|
||||
pipe.release();
|
||||
if (null != pipe) {
|
||||
pipe.close();
|
||||
pipe.release();
|
||||
}
|
||||
|
||||
if (DEBUG_LOG) {
|
||||
Log.d(TAG, "End download image " + index);
|
||||
|
||||
@@ -381,6 +381,8 @@
|
||||
<string name="settings_download_multi_thread_download_summary">最多同时下载 %s 张图片</string>
|
||||
<string name="settings_download_preload_image">预载图片</string>
|
||||
<string name="settings_download_preload_image_summary">向后预载 %s 张图片</string>
|
||||
<string name="settings_download_download_origin_image">下载原图</string>
|
||||
<string name="settings_download_download_origin_image_summary">这很危险!勾选此项会导致下载配额迅速流失</string>
|
||||
<string name="settings_download_restoring">恢复中</string>
|
||||
<string name="settings_download_restore_not_found">未找到可恢复下载项</string>
|
||||
<string name="settings_download_restore_failed">恢复失败</string>
|
||||
|
||||
@@ -381,6 +381,8 @@
|
||||
<string name="settings_download_multi_thread_download_summary">最多同時下載 %s 張圖片</string>
|
||||
<string name="settings_download_preload_image">預載圖片</string>
|
||||
<string name="settings_download_preload_image_summary">向後預載 %s 張圖片</string>
|
||||
<string name="settings_download_download_origin_image">下載原圖</string>
|
||||
<string name="settings_download_download_origin_image_summary">這很危險!勾選此項會導致下載配額迅速流失</string>
|
||||
<string name="settings_download_restoring">恢復中</string>
|
||||
<string name="settings_download_restore_not_found">未找到可恢復下載項</string>
|
||||
<string name="settings_download_restore_failed">恢復失敗</string>
|
||||
|
||||
@@ -381,6 +381,8 @@
|
||||
<string name="settings_download_multi_thread_download_summary">最多同時下載 %s 張圖片</string>
|
||||
<string name="settings_download_preload_image">預載圖片</string>
|
||||
<string name="settings_download_preload_image_summary">向後預載 %s 張圖片</string>
|
||||
<string name="settings_download_download_origin_image">下載原圖</string>
|
||||
<string name="settings_download_download_origin_image_summary">這很危險!勾選此項會導致下載配額迅速流失</string>
|
||||
<string name="settings_download_restoring">恢復中</string>
|
||||
<string name="settings_download_restore_not_found">未找到可恢復下載項</string>
|
||||
<string name="settings_download_restore_failed">恢復失敗</string>
|
||||
|
||||
@@ -421,6 +421,8 @@
|
||||
<string name="settings_download_multi_thread_download_summary">Up to %s images</string>
|
||||
<string name="settings_download_preload_image">Preload image</string>
|
||||
<string name="settings_download_preload_image_summary">Preload next %s image</string>
|
||||
<string name="settings_download_download_origin_image">Download original image</string>
|
||||
<string name="settings_download_download_origin_image_summary">It is dangerous! You may get 509 error</string>
|
||||
<string name="settings_download_restore_download_items">Restore download items</string>
|
||||
<string name="settings_download_restore_download_items_summary">Restore all download items in download location</string>
|
||||
<string name="settings_download_restoring">Restoring</string>
|
||||
|
||||
@@ -39,6 +39,12 @@
|
||||
app:entryValues="@array/preload_image_entry_values"
|
||||
android:defaultValue="5"/>
|
||||
|
||||
<com.hippo.preference.SwitchPreference
|
||||
android:key="download_origin_image"
|
||||
android:title="@string/settings_download_download_origin_image"
|
||||
android:summary="@string/settings_download_download_origin_image_summary"
|
||||
android:defaultValue="false"/>
|
||||
|
||||
<Preference
|
||||
android:key="restore_download_items"
|
||||
android:title="@string/settings_download_restore_download_items"
|
||||
|
||||
Reference in new issue
Block a user