From fe2271f357955df3a2a4f6a7897409b5cfa73a2c Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Sun, 4 Sep 2022 09:54:34 +0800 Subject: [PATCH 1/3] fix: change epub file copy position book.getFolderName returned value may change after function EpubFile.upBookInfo called, move a folder which is not related with bookName epub file copied will be deleted after BookHelp.clearInvalidCache called --- .../main/java/io/legado/app/help/BookHelp.kt | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 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 5bb49d90a..8fccb7723 100644 --- a/app/src/main/java/io/legado/app/help/BookHelp.kt +++ b/app/src/main/java/io/legado/app/help/BookHelp.kt @@ -31,6 +31,7 @@ object BookHelp { private val downloadDir: File = appCtx.externalFiles private const val cacheFolderName = "book_cache" private const val cacheImageFolderName = "images" + private const val cacheEpubFolderName = "epub" private val downloadImages = CopyOnWriteArraySet() fun clearCache() { @@ -55,15 +56,24 @@ object BookHelp { */ suspend fun clearInvalidCache() { withContext(IO) { - val bookFolderNames = appDb.bookDao.all.map { - it.getFolderName() + val bookFolderNames = ArrayList() + val originNames = ArrayList() + appDb.bookDao.all.forEach { + bookFolderNames.add(it.getFolderName()) + if (it.isEpub()) originNames.add(it.originName) } - val file = downloadDir.getFile(cacheFolderName) - file.listFiles()?.forEach { bookFile -> - if (!bookFolderNames.contains(bookFile.name)) { - FileUtils.delete(bookFile.absolutePath) + downloadDir.getFile(cacheFolderName) + .listFiles()?.forEach { bookFile -> + if (!bookFolderNames.contains(bookFile.name)) { + FileUtils.delete(bookFile.absolutePath) + } + } + downloadDir.getFile(cacheEpubFolderName) + .listFiles()?.forEach { epubFile -> + if (!originNames.contains(epubFile.name)) { + FileUtils.delete(epubFile.absolutePath) + } } - } } } @@ -165,7 +175,8 @@ object BookHelp { fun getEpubFile(book: Book): ZipFile { val uri = Uri.parse(book.bookUrl) if (uri.isContentScheme()) { - val path = FileUtils.getPath(downloadDir, cacheFolderName, book.getFolderName(), book.originName) + FileUtils.createFolderIfNotExist(downloadDir, cacheEpubFolderName) + val path = FileUtils.getPath(downloadDir, cacheEpubFolderName, book.originName) val file = File(path) val doc = DocumentFile.fromSingleUri(appCtx, uri) ?: throw IOException("文件不存在") From b29ce638df868604ed518be82626ea81072d05e4 Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Sun, 4 Sep 2022 11:56:53 +0800 Subject: [PATCH 2/3] Revert https://github.com/Xwite/legado/commit/38e2fe103a75ca7744333934a65ca3dfb2531003 --- .../io/legado/app/model/localBook/EpubFile.kt | 13 ++++++------- .../java/io/legado/app/utils/BitmapUtils.kt | 18 ------------------ 2 files changed, 6 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/localBook/EpubFile.kt b/app/src/main/java/io/legado/app/model/localBook/EpubFile.kt index 52bcb35a7..368305998 100644 --- a/app/src/main/java/io/legado/app/model/localBook/EpubFile.kt +++ b/app/src/main/java/io/legado/app/model/localBook/EpubFile.kt @@ -1,6 +1,7 @@ package io.legado.app.model.localBook import android.graphics.Bitmap +import android.graphics.BitmapFactory import android.text.TextUtils import io.legado.app.data.entities.Book import io.legado.app.data.entities.BookChapter @@ -84,13 +85,11 @@ class EpubFile(var book: Book) { if (!File(book.coverUrl!!).exists()) { /*部分书籍DRM处理后,封面获取异常,待优化*/ it.coverImage?.inputStream?.use { input -> - BitmapUtils.decodeBitmap(input)?.let { cover -> - val out = - FileOutputStream(FileUtils.createFileIfNotExist(book.coverUrl!!)) - cover.compress(Bitmap.CompressFormat.JPEG, 90, out) - out.flush() - out.close() - } + val cover = BitmapFactory.decodeStream(input) + val out = FileOutputStream(FileUtils.createFileIfNotExist(book.coverUrl!!)) + cover.compress(Bitmap.CompressFormat.JPEG, 90, out) + out.flush() + out.close() } } } diff --git a/app/src/main/java/io/legado/app/utils/BitmapUtils.kt b/app/src/main/java/io/legado/app/utils/BitmapUtils.kt index 40f7f7280..b6ef49b99 100644 --- a/app/src/main/java/io/legado/app/utils/BitmapUtils.kt +++ b/app/src/main/java/io/legado/app/utils/BitmapUtils.kt @@ -10,7 +10,6 @@ import android.graphics.Color import com.google.android.renderscript.Toolkit import java.io.FileInputStream import java.io.IOException -import java.io.InputStream import kotlin.math.* @@ -82,23 +81,6 @@ object BitmapUtils { } } - /** 从path中获取Bitmap图片 - * @param path 图片路径 - * @return - */ - @Throws(IOException::class) - fun decodeBitmap(inputStream: InputStream): Bitmap? { - return inputStream.use { - val opts = BitmapFactory.Options() - opts.inJustDecodeBounds = true - - BitmapFactory.decodeStream(inputStream, null, opts) - opts.inSampleSize = computeSampleSize(opts, -1, 128 * 128) - opts.inJustDecodeBounds = false - BitmapFactory.decodeStream(inputStream, null, opts) - } - } - /** * 以最省内存的方式读取本地资源的图片 * @param context 设备上下文 From c5b9b52650f3ce87b16884fde8ac5dc1e94c9b8a Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Sun, 4 Sep 2022 13:11:36 +0800 Subject: [PATCH 3/3] feat: update book in LocalBook.getChapterList --- .../main/java/io/legado/app/model/localBook/EpubFile.kt | 2 -- .../main/java/io/legado/app/model/localBook/LocalBook.kt | 9 ++++++--- .../main/java/io/legado/app/model/localBook/TextFile.kt | 3 --- .../main/java/io/legado/app/model/localBook/UmdFile.kt | 2 -- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/localBook/EpubFile.kt b/app/src/main/java/io/legado/app/model/localBook/EpubFile.kt index 8d158b960..b171680d1 100644 --- a/app/src/main/java/io/legado/app/model/localBook/EpubFile.kt +++ b/app/src/main/java/io/legado/app/model/localBook/EpubFile.kt @@ -261,8 +261,6 @@ class EpubFile(var book: Book) { } } } - book.latestChapterTitle = chapterList.lastOrNull()?.title - book.totalChapterNum = chapterList.size return chapterList } diff --git a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt index eae54864f..11bb5f85a 100644 --- a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt +++ b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt @@ -78,9 +78,12 @@ object LocalBook { if (chapters.isEmpty()) { throw TocEmptyException(appCtx.getString(R.string.chapter_list_empty)) } - val lh = LinkedHashSet(chapters) - lh.forEachIndexed { index, bookChapter -> bookChapter.index = index } - return ArrayList(lh) + val list = ArrayList(LinkedHashSet(chapters)) + list.forEachIndexed { index, bookChapter -> bookChapter.index = index } + book.latestChapterTitle = list.last().title + book.totalChapterNum = list.size + book.save() + return list } fun getContent(book: Book, chapter: BookChapter): String? { diff --git a/app/src/main/java/io/legado/app/model/localBook/TextFile.kt b/app/src/main/java/io/legado/app/model/localBook/TextFile.kt index 2d726d843..b283dd895 100644 --- a/app/src/main/java/io/legado/app/model/localBook/TextFile.kt +++ b/app/src/main/java/io/legado/app/model/localBook/TextFile.kt @@ -77,9 +77,6 @@ class TextFile(private val book: Book) { bookChapter.bookUrl = book.bookUrl bookChapter.url = MD5Utils.md5Encode16(book.originName + index + bookChapter.title) } - book.latestChapterTitle = toc.last().title - book.totalChapterNum = toc.size - book.save() return toc } diff --git a/app/src/main/java/io/legado/app/model/localBook/UmdFile.kt b/app/src/main/java/io/legado/app/model/localBook/UmdFile.kt index 9e1a38b48..963d2eb69 100644 --- a/app/src/main/java/io/legado/app/model/localBook/UmdFile.kt +++ b/app/src/main/java/io/legado/app/model/localBook/UmdFile.kt @@ -112,8 +112,6 @@ class UmdFile(var book: Book) { DebugLog.d(javaClass.name, chapter.url) chapterList.add(chapter) } - book.latestChapterTitle = chapterList.lastOrNull()?.title - book.totalChapterNum = chapterList.size return chapterList }