From 427047fbccf0b94963152b2193d2c79d95eaf81d Mon Sep 17 00:00:00 2001 From: niuhb <76513019+niu-hb@users.noreply.github.com> Date: Tue, 11 Feb 2025 11:38:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=BC=AB=E7=94=BB=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E8=87=AA=E5=8A=A8=E6=B8=85=E9=99=A4=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=20(#4645)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/constant/PreferKey.kt | 1 + .../java/io/legado/app/help/book/BookHelp.kt | 44 +++++++++++++++++++ .../io/legado/app/help/config/AppConfig.kt | 6 +++ .../app/ui/config/OtherConfigFragment.kt | 15 +++++++ app/src/main/res/values-es-rES/strings.xml | 2 + app/src/main/res/values-ja-rJP/strings.xml | 2 + app/src/main/res/values-pt-rBR/strings.xml | 2 + app/src/main/res/values-vi/strings.xml | 2 + app/src/main/res/values-zh-rHK/strings.xml | 2 + app/src/main/res/values-zh-rTW/strings.xml | 2 + app/src/main/res/values-zh/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/pref_config_other.xml | 5 +++ 13 files changed, 87 insertions(+) diff --git a/app/src/main/java/io/legado/app/constant/PreferKey.kt b/app/src/main/java/io/legado/app/constant/PreferKey.kt index 9511c9da1..c00fb89c9 100644 --- a/app/src/main/java/io/legado/app/constant/PreferKey.kt +++ b/app/src/main/java/io/legado/app/constant/PreferKey.kt @@ -93,6 +93,7 @@ object PreferKey { const val cronet = "Cronet" const val antiAlias = "antiAlias" const val bitmapCacheSize = "bitmapCacheSize" + const val bitmapRetainNum = "bitmapRetainNum" const val preDownloadNum = "preDownloadNum" const val autoRefresh = "auto_refresh" const val defaultToRead = "defaultToRead" diff --git a/app/src/main/java/io/legado/app/help/book/BookHelp.kt b/app/src/main/java/io/legado/app/help/book/BookHelp.kt index c93bec606..641495ed4 100644 --- a/app/src/main/java/io/legado/app/help/book/BookHelp.kt +++ b/app/src/main/java/io/legado/app/help/book/BookHelp.kt @@ -5,6 +5,7 @@ import android.os.ParcelFileDescriptor import androidx.documentfile.provider.DocumentFile import io.legado.app.constant.AppLog import io.legado.app.constant.AppPattern +import io.legado.app.constant.BookType import io.legado.app.constant.EventBus import io.legado.app.data.appDb import io.legado.app.data.entities.Book @@ -96,6 +97,7 @@ object BookHelp { val bookFolderNames = hashSetOf() val originNames = hashSetOf() appDb.bookDao.all.forEach { + clearComicCache(it) bookFolderNames.add(it.getFolderName()) if (it.isEpub) originNames.add(it.originName) } @@ -119,6 +121,48 @@ object BookHelp { } } + //清除已经看过的漫画数据 + private fun clearComicCache(book: Book) { + //只处理漫画 + if (book.type == BookType.image) { + //为0的时候,不清除已缓存数据 + if (AppConfig.bitmapRetainNum == 0) { + return + } + //向前保留设定数量,向后保留预下载数量 + val startIndex = book.durChapterIndex - AppConfig.bitmapRetainNum + val endIndex = book.durChapterIndex + AppConfig.preDownloadNum + val chapterList = appDb.bookChapterDao.getChapterList( + book.bookUrl, + startIndex, + endIndex + ) + val imgNames = hashSetOf() + //获取需要保留章节的图片信息 + chapterList.forEach { + val content = getContent(book, it) + if (content != null) { + val matcher = AppPattern.imgPattern.matcher(content) + while (matcher.find()) { + val src = matcher.group(1) ?: continue + val mSrc = NetworkUtils.getAbsoluteURL(it.url, src) + imgNames.add("${MD5Utils.md5Encode16(mSrc)}.${getImageSuffix(mSrc)}") + } + } + } + downloadDir.getFile( + cacheFolderName, + book.getFolderName(), + cacheImageFolderName + ).listFiles()?.forEach { imgFile -> + if (!imgNames.contains(imgFile.name)){ + imgFile.delete() + } + } + + } + } + suspend fun saveContent( bookSource: BookSource, book: Book, diff --git a/app/src/main/java/io/legado/app/help/config/AppConfig.kt b/app/src/main/java/io/legado/app/help/config/AppConfig.kt index 5fad091f9..27dc06546 100644 --- a/app/src/main/java/io/legado/app/help/config/AppConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/AppConfig.kt @@ -554,6 +554,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { appCtx.putPrefInt(PreferKey.bitmapCacheSize, value) } + var bitmapRetainNum: Int + get() = appCtx.getPrefInt(PreferKey.bitmapRetainNum, 0) + set(value) { + appCtx.putPrefInt(PreferKey.bitmapRetainNum, value) + } + var showReadTitleBarAddition: Boolean get() = appCtx.getPrefBoolean(PreferKey.showReadTitleAddition, true) set(value) { diff --git a/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt index 35202dda1..928ad5bde 100644 --- a/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt +++ b/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt @@ -68,6 +68,7 @@ class OtherConfigFragment : PreferenceFragment(), } upPreferenceSummary(PreferKey.checkSource, CheckSource.summary) upPreferenceSummary(PreferKey.bitmapCacheSize, AppConfig.bitmapCacheSize.toString()) + upPreferenceSummary(PreferKey.bitmapRetainNum, AppConfig.bitmapRetainNum.toString()) upPreferenceSummary(PreferKey.sourceEditMaxLine, AppConfig.sourceEditMaxLine.toString()) } @@ -132,6 +133,14 @@ class OtherConfigFragment : PreferenceFragment(), ImageProvider.bitmapLruCache.resize(ImageProvider.cacheSize) } } + PreferKey.bitmapRetainNum -> NumberPickerDialog(requireContext()) + .setTitle(getString(R.string.bitmap_retain_number)) + .setMaxValue(999) + .setMinValue(0) + .setValue(AppConfig.bitmapRetainNum) + .show { + AppConfig.bitmapRetainNum = it + } PreferKey.sourceEditMaxLine -> { NumberPickerDialog(requireContext()) @@ -203,6 +212,10 @@ class OtherConfigFragment : PreferenceFragment(), upPreferenceSummary(key, AppConfig.bitmapCacheSize.toString()) } + PreferKey.bitmapRetainNum -> { + upPreferenceSummary(key, AppConfig.bitmapRetainNum.toString()) + } + PreferKey.sourceEditMaxLine -> { upPreferenceSummary(key, AppConfig.sourceEditMaxLine.toString()) } @@ -219,6 +232,8 @@ class OtherConfigFragment : PreferenceFragment(), PreferKey.webPort -> preference.summary = getString(R.string.web_port_summary, value) PreferKey.bitmapCacheSize -> preference.summary = getString(R.string.bitmap_cache_size_summary, value) + PreferKey.bitmapRetainNum -> preference.summary = + getString(R.string.bitmap_retain_number_summary, value) PreferKey.sourceEditMaxLine -> preference.summary = getString(R.string.source_edit_max_line_summary, value) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 362aee223..f5154db58 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -1003,6 +1003,8 @@ RemoteBook Current cache max size %1$s MB bitmap cache size + Keep the number of chapters read %s + Number of manga reservations Export Picture Files Fail to decode bitmap diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 0ecfff8a4..263df3ec1 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1006,6 +1006,8 @@ RemoteBook Current cache max size %1$s MB bitmap cache size + 保留已读章节数量 %s + 漫画保留数量 Export Picture Files Fail to decode bitmap diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index bb915d599..64d26b623 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1006,6 +1006,8 @@ RemoteBook Current cache max size %1$s MB bitmap cache size + Keep the number of chapters read %s + Number of manga reservations Export Picture Files Fail to decode bitmap diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 14552b20f..d4d8b0565 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1003,6 +1003,8 @@ Còn Sách từ xa Kích thước tối đa của bộ đệm hiện tại %1$s MB kích thước bộ đệm bitmap + Giữ số chương đã đọc %s + Số lượng đặt chỗ manga Xuất tập tin ảnh Không thể giải mã bitmap diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 187f683b9..4c6b46221 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -1003,6 +1003,8 @@ 远程书籍 当前最大缓存 %1$s MB 图片绘制缓存 + 保留已讀章節數量 %s + 漫畫保留數量 TXT导出图片 图片解码失败 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 0dbe8cd91..f59974897 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1005,6 +1005,8 @@ 远程書籍 目前最大快取 %1$s MB 圖片繪製快取 + 保留已讀章節數量 %s + 漫畫保留數量 TXT匯出圖片 圖片解碼失敗 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index f40fb4bab..8734ae036 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1006,6 +1006,8 @@ 远程书籍 当前最大缓存 %1$s MB 图片绘制缓存 + 保留已读章节数量 %s + 漫画保留数量 TXT 导出图片 图片解码失败 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2fcf619bf..1d12cbe97 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1009,6 +1009,8 @@ RemoteBook Current cache max size %1$s MB bitmap cache size + Keep the number of chapters read %s + Number of manga reservations Export Picture Files Fail to decode bitmap diff --git a/app/src/main/res/xml/pref_config_other.xml b/app/src/main/res/xml/pref_config_other.xml index 400494ab1..cdd86bbff 100644 --- a/app/src/main/res/xml/pref_config_other.xml +++ b/app/src/main/res/xml/pref_config_other.xml @@ -109,6 +109,11 @@ android:summary="@string/bitmap_cache_size_summary" android:title="@string/bitmap_cache_size" /> + +