From 1c721dfb0ce52388fed5934dfa3c8227e53b98b9 Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Mon, 7 Feb 2022 18:35:22 +0800 Subject: [PATCH 1/4] =?UTF-8?q?txt=E5=9D=87=E5=88=86=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 2 +- .../main/java/io/legado/app/data/entities/Book.kt | 9 +++++++++ .../java/io/legado/app/model/localBook/TextFile.kt | 3 ++- .../io/legado/app/ui/book/info/BookInfoActivity.kt | 12 ++++++++++++ app/src/main/res/menu/book_info.xml | 6 ++++++ 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-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 ++ 11 files changed, 42 insertions(+), 2 deletions(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 61be7e0ee..19101632f 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -15,7 +15,7 @@ * 校验失效分组具体到搜索发现目录正文 * txt文件初次解析目录不选择禁用的正则 -* txt单章字数超102400均分txt +* txt单章字数超102400均分txt,添加开关 **2022/02/03** diff --git a/app/src/main/java/io/legado/app/data/entities/Book.kt b/app/src/main/java/io/legado/app/data/entities/Book.kt index 999a40c2e..8384e7305 100644 --- a/app/src/main/java/io/legado/app/data/entities/Book.kt +++ b/app/src/main/java/io/legado/app/data/entities/Book.kt @@ -160,6 +160,14 @@ data class Book( config().reSegment = reSegment } + fun getLimitContentLength(): Boolean { + return config().limitContentLength + } + + fun setLimitContentLength(limitContentLength: Boolean) { + config().limitContentLength = limitContentLength + } + fun getPageAnim(): Int { return config().pageAnim } @@ -270,6 +278,7 @@ data class Book( var reverseToc: Boolean = false, var pageAnim: Int = -1, var reSegment: Boolean = false, + var limitContentLength: Boolean = true, //txt规则解析目录时超过规定的最大字数时均分txt var imageStyle: String? = null, var useReplaceRule: Boolean = AppConfig.replaceEnableDefault,// 正文使用净化替换规则 var delTag: Long = 0L,//去除标签 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 e39c4f007..3cef1f76e 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 @@ -47,6 +47,7 @@ class TextFile(private val book: Book) { private val maxLengthWithNoToc = 10 * 1024 //使用正则划分目录,每个章节的最大允许长度 private val maxLengthWithToc = 102400 + private val limitContentLength = book.getLimitContentLength() private val tocRules = arrayListOf() private var charset: Charset = book.fileCharset() @@ -128,7 +129,7 @@ class TextFile(private val book: Book) { val chapterContent = blockContent.substring(seekPos, chapterStart) val chapterLength = chapterContent.toByteArray(charset).size val lastStart = toc.lastOrNull()?.start ?: curOffset - if (curOffset + chapterLength - lastStart > maxLengthWithToc) { + if (limitContentLength && curOffset + chapterLength - lastStart > maxLengthWithToc) { bis.close() return analyze() } diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index 12e8d132f..7a48b95c9 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -118,12 +118,16 @@ class BookInfoActivity : override fun onMenuOpened(featureId: Int, menu: Menu): Boolean { menu.findItem(R.id.menu_can_update)?.isChecked = viewModel.bookData.value?.canUpdate ?: true + menu.findItem(R.id.menu_limit_content_length)?.isChecked = + viewModel.bookData.value?.getLimitContentLength() ?: false menu.findItem(R.id.menu_login)?.isVisible = !viewModel.bookSource?.loginUrl.isNullOrBlank() menu.findItem(R.id.menu_set_source_variable)?.isVisible = viewModel.bookSource != null menu.findItem(R.id.menu_set_book_variable)?.isVisible = viewModel.bookSource != null + menu.findItem(R.id.menu_limit_content_length)?.isVisible = + viewModel.bookSource == null return super.onMenuOpened(featureId, menu) } @@ -183,6 +187,14 @@ class BookInfoActivity : } R.id.menu_clear_cache -> viewModel.clearCache() R.id.menu_log -> showDialogFragment() + R.id.menu_limit_content_length -> { + upLoading(true) + viewModel.bookData.value?.let { + it.setLimitContentLength(!item.isChecked) + viewModel.loadBookInfo(it, false) + } + if (item.isChecked) longToastOnUi(R.string.need_more_time_load_content) + } } return super.onCompatOptionsItemSelected(item) } diff --git a/app/src/main/res/menu/book_info.xml b/app/src/main/res/menu/book_info.xml index 99b8c39ca..d324786f8 100644 --- a/app/src/main/res/menu/book_info.xml +++ b/app/src/main/res/menu/book_info.xml @@ -55,6 +55,12 @@ android:checkable="true" app:showAsAction="never" /> + + Ajuste de margen Activar actualizaciones Desactivar actualizaciones + 限制正文长度 + 正文长度过长时,加载正文可能会花费更多时间 Invertir Buscar libro por nombre o autor Nombre del libro, autor, URL diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 7ee8d230b..353806354 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -338,6 +338,8 @@ Margin adjustment Enable update Disable update + 限制正文长度 + 正文长度过长时,加载正文可能会花费更多时间 Inverse Search book name/author Book name,Author,URL diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 891ea6dcb..ed5ae5cab 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -335,6 +335,8 @@ Tip 邊距跟隨邊距調整 允許更新 禁止更新 + 限制正文长度 + 正文长度过长时,加载正文可能会花费更多时间 反選 搜索書名、作者 書名、作者、URL diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index c1dd02fc1..e754d45f7 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -337,6 +337,8 @@ Tip邊距跟隨邊距調整 允許更新 禁止更新 + 限制正文长度 + 正文长度过长时,加载正文可能会花费更多时间 反選 搜尋書名、作者 書名、作者、URL diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 87e293862..219fdff47 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -337,6 +337,8 @@ Tip边距跟随边距调整 允许更新 禁止更新 + 限制正文长度 + 正文长度过长时,加载正文可能会花费更多时间 反选 搜索书名、作者 书名、作者、URL diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a8314a49f..17148d869 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -338,6 +338,8 @@ Margin adjustment Enable update Disable update + 限制正文长度 + 正文长度过长时,加载正文可能会花费更多时间 Inverse Search book name/author Book name,Author,URL From 71ce2fe468bd958f7d5d8af56705c277911190a7 Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Mon, 7 Feb 2022 20:34:40 +0800 Subject: [PATCH 2/4] =?UTF-8?q?BookInfoViewModel.kt:loadChapter=20?= =?UTF-8?q?=E5=BA=94=E8=AF=A5=E5=85=88=E6=8A=8A=E6=97=A7=E7=9A=84chapterLi?= =?UTF-8?q?st=E6=95=B0=E6=8D=AE=E6=B8=85=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt index 56457a5d1..eac632df0 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt @@ -118,6 +118,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { if (book.isLocalBook()) { LocalBook.getChapterList(book).let { appDb.bookDao.update(book) + appDb.bookChapterDao.delByBook(book.bookUrl) appDb.bookChapterDao.insert(*it.toTypedArray()) chapterListData.postValue(it) } @@ -127,6 +128,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { .onSuccess(IO) { if (inBookshelf) { appDb.bookDao.update(book) + appDb.bookChapterDao.delByBook(book.bookUrl) appDb.bookChapterDao.insert(*it.toTypedArray()) } if (changeDruChapterIndex == null) { From 3f723c88d3e992442a23749e50f19b7a9bb6e05d Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Mon, 7 Feb 2022 22:05:02 +0800 Subject: [PATCH 3/4] =?UTF-8?q?LocalBook.kt:analyzeNameAuthor=20=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E9=98=85=E8=AF=BB=E9=BB=98=E8=AE=A4=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E7=9A=84=E6=96=87=E4=BB=B6=E5=90=8D;=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=AD=A3=E5=88=99=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/model/localBook/LocalBook.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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 87ef1950e..5b1027594 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 @@ -128,9 +128,9 @@ object LocalBook { val m1 = Pattern .compile("(.*?)《([^《》]+)》(.*)") .matcher(tempFileName) - //匹配 书名 by 作者名.txt + //匹配 书名 作者:作者名.txt val m2 = Pattern - .compile("(^)(.+) by (.+)$") + .compile("(^)(.+) 作者:(.+)$") .matcher(tempFileName) (m1.takeIf { m1.find() } ?: m2.takeIf { m2.find() }).run { @@ -152,13 +152,13 @@ object LocalBook { name = bookMess["name"] ?: tempFileName author = bookMess["author"]?.takeIf { it.length != tempFileName.length } ?: "" } catch (e: Exception) { - name = tempFileName.replace(AppPattern.nameRegex, "") - author = tempFileName.replace(AppPattern.authorRegex, "") + name = BookHelp.formatBookName(tempFileName) + author = BookHelp.formatBookAuthor(tempFileName.replace(name, "")) .takeIf { it.length != tempFileName.length } ?: "" } } else { - name = tempFileName.replace(AppPattern.nameRegex, "") - author = tempFileName.replace(AppPattern.authorRegex, "") + name = BookHelp.formatBookName(tempFileName) + author = BookHelp.formatBookAuthor(tempFileName.replace(name, "")) .takeIf { it.length != tempFileName.length } ?: "" } From fdfa9a3ff2c6c9187f56ed2049d9e3e33cb54a15 Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Tue, 8 Feb 2022 07:55:52 +0800 Subject: [PATCH 4/4] =?UTF-8?q?txt=E7=9B=AE=E5=BD=95=E6=94=B9=E5=8F=98?= =?UTF-8?q?=E6=97=B6=E6=AD=A3=E6=96=87=E5=86=85=E5=AE=B9=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=8F=8A=E6=97=B6=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/model/ReadBook.kt | 3 ++- .../main/java/io/legado/app/ui/book/info/BookInfoActivity.kt | 4 ++++ .../main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/model/ReadBook.kt b/app/src/main/java/io/legado/app/model/ReadBook.kt index 5b1131f22..7ae26ffa0 100644 --- a/app/src/main/java/io/legado/app/model/ReadBook.kt +++ b/app/src/main/java/io/legado/app/model/ReadBook.kt @@ -31,6 +31,7 @@ object ReadBook : CoroutineScope by MainScope() { var book: Book? = null var callBack: CallBack? = null var inBookshelf = false + var tocChanged = false var chapterSize = 0 var durChapterIndex = 0 var durChapterPos = 0 @@ -65,7 +66,7 @@ object ReadBook : CoroutineScope by MainScope() { fun upData(book: Book) { ReadBook.book = book chapterSize = appDb.bookChapterDao.getChapterCount(book.bookUrl) - if (durChapterIndex != book.durChapterIndex) { + if (durChapterIndex != book.durChapterIndex || tocChanged) { durChapterIndex = book.durChapterIndex durChapterPos = book.durChapterPos clearTextChapter() diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index 7a48b95c9..fb0830572 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -91,6 +91,7 @@ class BookInfoActivity : viewModel.upEditBook() } } + private var tocChanged = false override val binding by viewBinding(ActivityBookInfoBinding::inflate) override val viewModel by viewModels() @@ -189,6 +190,7 @@ class BookInfoActivity : R.id.menu_log -> showDialogFragment() R.id.menu_limit_content_length -> { upLoading(true) + tocChanged = true viewModel.bookData.value?.let { it.setLimitContentLength(!item.isChecked) viewModel.loadBookInfo(it, false) @@ -441,8 +443,10 @@ class BookInfoActivity : Intent(this, ReadBookActivity::class.java) .putExtra("bookUrl", book.bookUrl) .putExtra("inBookshelf", viewModel.inBookshelf) + .putExtra("tocChanged", tocChanged) ) } + tocChanged = false } override val oldBook: Book? diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index de573fed9..a83bc0352 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -40,6 +40,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { fun initData(intent: Intent) { execute { ReadBook.inBookshelf = intent.getBooleanExtra("inBookshelf", true) + ReadBook.tocChanged = intent.getBooleanExtra("tocChanged", false) val bookUrl = intent.getStringExtra("bookUrl") val book = when { bookUrl.isNullOrEmpty() -> appDb.bookDao.lastReadBook