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 {