Add download origin image

This commit is contained in:
seven332 committed 2016-03-24 20:51:05 +08:00
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\"> &nbsp; <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>
+2
View File
@@ -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"