From 257804cc85ec2a38c2c74b130df4b3001d8de5fb Mon Sep 17 00:00:00 2001 From: NekoInverter <42698724+NekoInverter@users.noreply.github.com> Date: Tue, 27 Oct 2020 22:03:54 +0800 Subject: [PATCH] Fix image extension --- app/build.gradle | 2 +- .../gallery/ArchiveGalleryProvider.java | 7 ++++ .../ehviewer/gallery/DirGalleryProvider.java | 29 ++++++++++++++-- .../ehviewer/gallery/EhGalleryProvider.java | 12 +++++++ .../ehviewer/gallery/GalleryProvider2.java | 6 ++++ .../hippo/ehviewer/spider/SpiderQueen.java | 33 +++++++++++++++++++ .../hippo/ehviewer/ui/GalleryActivity.java | 2 +- 7 files changed, 87 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6971ea386..c9e310c36 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,7 +27,7 @@ android { applicationId "com.hippo.ehviewer" minSdkVersion 21 targetSdkVersion 30 - versionCode 115 + versionCode 116 versionName "1.7.12" resConfigs "zh", "zh-rCN", "zh-rHK", "zh-rTW", "es", "ja", "ko", "fr", "de", "th" diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/ArchiveGalleryProvider.java b/app/src/main/java/com/hippo/ehviewer/gallery/ArchiveGalleryProvider.java index 63fdf456a..57e7d819b 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/ArchiveGalleryProvider.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/ArchiveGalleryProvider.java @@ -157,6 +157,13 @@ public class ArchiveGalleryProvider extends GalleryProvider2 { return null; } + @NonNull + @Override + public String getImageFilenameWithExtension(int index) { + // TODO + return Integer.toString(index); + } + private class ArchiveTask implements Runnable { @Override public void run() { diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/DirGalleryProvider.java b/app/src/main/java/com/hippo/ehviewer/gallery/DirGalleryProvider.java index 7ff39a717..876e8c497 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/DirGalleryProvider.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/DirGalleryProvider.java @@ -125,8 +125,33 @@ public class DirGalleryProvider extends GalleryProvider2 implements Runnable { @NonNull @Override public String getImageFilename(int index) { - // TODO - return Integer.toString(index); + UniFile[] fileList = mFileList.get(); + if (null == fileList || index < 0 || index >= fileList.length) { + return Integer.toString(index); + } + UniFile src = fileList[index]; + String name = src.getName(); + if (name == null) { + return Integer.toString(index); + } + return name; + } + + @NonNull + @Override + public String getImageFilenameWithExtension(int index) { + UniFile[] fileList = mFileList.get(); + if (null == fileList || index < 0 || index >= fileList.length) { + return Integer.toString(index); + } + UniFile src = fileList[index]; + String extension = FileUtils.getExtensionFromFilename(src.getName()); + String name = src.getName(); + if (name == null) { + return Integer.toString(index); + } + name = null != extension ? name + "." + extension : name; + return name; } @Override diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/EhGalleryProvider.java b/app/src/main/java/com/hippo/ehviewer/gallery/EhGalleryProvider.java index 6f068c25e..553598c26 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/EhGalleryProvider.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/EhGalleryProvider.java @@ -77,6 +77,18 @@ public class EhGalleryProvider extends GalleryProvider2 implements SpiderQueen.O return String.format(Locale.US, "%d-%s-%08d", mGalleryInfo.gid, mGalleryInfo.token, index + 1); } + @NonNull + @Override + public String getImageFilenameWithExtension(int index) { + if (null != mSpiderQueen) { + String extension = mSpiderQueen.getExtension(index); + if (extension != null) { + return String.format(Locale.US, "%d-%s-%08d.%s", mGalleryInfo.gid, mGalleryInfo.token, index + 1, extension); + } + } + return String.format(Locale.US, "%d-%s-%08d", mGalleryInfo.gid, mGalleryInfo.token, index + 1); + } + @Override public boolean save(int index, @NonNull UniFile file) { if (null != mSpiderQueen) { diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/GalleryProvider2.java b/app/src/main/java/com/hippo/ehviewer/gallery/GalleryProvider2.java index 4ea4bd30c..13be518cc 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/GalleryProvider2.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/GalleryProvider2.java @@ -45,6 +45,12 @@ public abstract class GalleryProvider2 extends GalleryProvider { @NonNull public abstract String getImageFilename(int index); + /** + * @return with extension + */ + @NonNull + public abstract String getImageFilenameWithExtension(int index); + public abstract boolean save(int index, @NonNull UniFile file); /** diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java index b9412e6e4..804d9dae9 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java @@ -629,6 +629,39 @@ public final class SpiderQueen implements Runnable { } } + + @Nullable + public String getExtension(int index) { + int state = getPageState(index); + if (STATE_FINISHED != state) { + return null; + } + + InputStreamPipe pipe = mSpiderDen.openInputStreamPipe(index); + if (null == pipe) { + return null; + } + + OutputStream os = null; + try { + pipe.obtain(); + + // Get dst file + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeStream(pipe.open(), null, options); + pipe.close(); + + return MimeTypeMap.getSingleton().getExtensionFromMimeType(options.outMimeType); + } catch (IOException e) { + return null; + } finally { + pipe.close(); + pipe.release(); + IOUtils.closeQuietly(os); + } + } + public int getStartPage() { SpiderInfo spiderInfo = readSpiderInfoFromLocal(); if (spiderInfo != null) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index abdfe7215..d4c66bdee 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -785,7 +785,7 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan return; } - String filename = mGalleryProvider.getImageFilename(page); + String filename = mGalleryProvider.getImageFilenameWithExtension(page); String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension( MimeTypeMap.getFileExtensionFromUrl(filename)); if (TextUtils.isEmpty(mimeType)) {