From c2ed976becd944f4abc5f78e8c8731b3eeb2fd32 Mon Sep 17 00:00:00 2001 From: AndyBernie Date: Fri, 21 Aug 2020 18:10:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=9B=BE=E7=89=87=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/help/BookHelp.kt | 31 +++++++++++++------ .../book/read/page/provider/ImageProvider.kt | 15 ++------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/BookHelp.kt b/app/src/main/java/io/legado/app/help/BookHelp.kt index 5a0721620..5a30aba70 100644 --- a/app/src/main/java/io/legado/app/help/BookHelp.kt +++ b/app/src/main/java/io/legado/app/help/BookHelp.kt @@ -25,11 +25,12 @@ import kotlin.math.min object BookHelp { private const val cacheFolderName = "book_cache" + private const val cacheImageFolderName = "images" private val downloadDir: File = App.INSTANCE.externalFilesDir private val srcPattern = Pattern.compile("", Pattern.CASE_INSENSITIVE) - private fun bookFolderName(book: Book): String { + fun bookFolderName(book: Book): String { return formatFolderName(book.name) + MD5Utils.md5Encode16(book.bookUrl) } @@ -81,19 +82,31 @@ object BookHelp { var src = matcher.group(1) src = NetworkUtils.getAbsoluteURL(bookChapter.url, src) src?.let { - val analyzeUrl = AnalyzeUrl(src, null, null, null, null) - analyzeUrl.getImageBytes(book.origin)?.let { - FileUtils.createFileIfNotExist( - downloadDir, - "${MD5Utils.md5Encode16(src)}${src.substringAfterLast(".").substringBefore(",")}", - "images", book.name - ).writeBytes(it) - } + saveImage(book, src) } } } postEvent(EventBus.SAVE_CONTENT, bookChapter) } + + fun saveImage(book: Book, src:String) { + val analyzeUrl = AnalyzeUrl(src, null, null, null, null) + analyzeUrl.getImageBytes(book.origin)?.let { + FileUtils.createFileIfNotExist( + downloadDir, + "${MD5Utils.md5Encode16(src)}${src.substringAfterLast(".").substringBefore(",")}", + subDirs = *arrayOf(cacheFolderName, bookFolderName(book), cacheImageFolderName) + ).writeBytes(it) + } + } + + fun getImage(book:Book, src:String): File { + return FileUtils.getFile( + downloadDir, + "${MD5Utils.md5Encode16(src)}${src.substringAfterLast(".").substringBefore(",")}", + subDirs = *arrayOf(cacheFolderName, bookFolderName(book), cacheImageFolderName) + ) + } fun getChapterFiles(book: Book): List { val fileNameList = arrayListOf() diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt index 3a6b80d8e..30ac0a613 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt @@ -3,15 +3,13 @@ package io.legado.app.ui.book.read.page.provider import android.graphics.Bitmap import io.legado.app.App import io.legado.app.data.entities.Book -import io.legado.app.help.http.HttpHelper +import io.legado.app.help.BookHelp import io.legado.app.model.localBook.EPUBFile import io.legado.app.utils.BitmapUtils import io.legado.app.utils.FileUtils -import io.legado.app.utils.MD5Utils import io.legado.app.utils.externalFilesDir import java.io.FileOutputStream import java.util.concurrent.ConcurrentHashMap -import io.legado.app.model.analyzeRule.AnalyzeUrl object ImageProvider { @@ -36,11 +34,7 @@ object ImageProvider { getCache(chapterIndex, src)?.let { return it } - val vFile = FileUtils.getFile( - App.INSTANCE.externalFilesDir, - "${MD5Utils.md5Encode16(src)}${src.substringAfterLast(".").substringBefore(",")}", - "images", book.name - ) + val vFile = BookHelp.getImage(book, src) if (!vFile.exists()) { if (book.isEpub()) { EPUBFile.getImage(book, src).use { @@ -50,10 +44,7 @@ object ImageProvider { out.close() } } else if (!onUi) { - val analyzeUrl = AnalyzeUrl(src, null, null, null, null) - analyzeUrl.getImageBytes(book.origin)?.let { - FileUtils.createFileIfNotExist(vFile.absolutePath).writeBytes(it) - } + BookHelp.saveImage(book, src) } } return try {