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 97a607a74..66d0c2ebc 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 @@ -245,6 +245,8 @@ object LocalBook { } else { deleteBook(book, false) upBookInfo(book) + // 触发 isLocalModified + book.latestChapterTime = 0 //已有书籍说明是更新,删除原有目录 appDb.bookChapterDao.delByBook(bookUrl) } 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 fca8878e4..4e7cd6b3e 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 @@ -76,16 +76,17 @@ class TextFile(private var book: Book) { */ @Throws(FileNotFoundException::class, SecurityException::class, EmptyFileException::class) fun getChapterList(): ArrayList { - if (book.charset == null || book.tocUrl.isBlank()) { + val modified = book.isLocalModified() + if (book.charset == null || book.tocUrl.isBlank() || modified) { LocalBook.getBookInputStream(book).use { bis -> val buffer = ByteArray(bufferSize) val length = bis.read(buffer) if (length == -1) throw EmptyFileException("Unexpected Empty Txt File") - if (book.charset.isNullOrBlank()) { + if (book.charset.isNullOrBlank() || modified) { book.charset = EncodingDetect.getEncode(buffer.copyOf(length)) } charset = book.fileCharset() - if (book.tocUrl.isBlank()) { + if (book.tocUrl.isBlank() || modified) { val blockContent = String(buffer, 0, length, charset) book.tocUrl = getTocRule(blockContent)?.pattern() ?: "" } @@ -223,7 +224,7 @@ class TextFile(private var book: Book) { */ if (toc.isEmpty()) { //如果当前没有章节,那么就是序章 //加入简介 - if (StringUtils.trim(chapterContent).isNotEmpty()) { + if (chapterContent.isNotBlank()) { val qyChapter = BookChapter() qyChapter.title = "前言" qyChapter.start = curOffset diff --git a/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt b/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt index 9cd64f516..557a72a94 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt @@ -195,9 +195,11 @@ class TocActivity : VMBaseActivity(), waitDialog.show() viewModel.upBookTocRule(book) { waitDialog.dismiss() - ReadBook.book?.let { readBook -> - if (readBook == book) { + if (ReadBook.book == book) { + if (it == null) { ReadBook.upMsg(null) + } else { + ReadBook.upMsg("LoadTocError:${it.localizedMessage}") } } } diff --git a/app/src/main/java/io/legado/app/ui/book/toc/TocViewModel.kt b/app/src/main/java/io/legado/app/ui/book/toc/TocViewModel.kt index c2b9b1d26..5ca389bbb 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/TocViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/TocViewModel.kt @@ -35,7 +35,7 @@ class TocViewModel(application: Application) : BaseViewModel(application) { } } - fun upBookTocRule(book: Book, finally: () -> Unit) { + fun upBookTocRule(book: Book, complete: (Throwable?) -> Unit) { execute { appDb.bookDao.update(book) LocalBook.getChapterList(book).let { @@ -45,8 +45,10 @@ class TocViewModel(application: Application) : BaseViewModel(application) { ReadBook.onChapterListUpdated(book) bookData.postValue(book) } - }.onFinally { - finally.invoke() + }.onSuccess { + complete.invoke(null) + }.onError { + complete.invoke(it) } } diff --git a/modules/rhino/src/main/java/com/script/rhino/RhinoClassShutter.kt b/modules/rhino/src/main/java/com/script/rhino/RhinoClassShutter.kt index c2c2e3cfa..356fe350f 100644 --- a/modules/rhino/src/main/java/com/script/rhino/RhinoClassShutter.kt +++ b/modules/rhino/src/main/java/com/script/rhino/RhinoClassShutter.kt @@ -55,6 +55,7 @@ object RhinoClassShutter : ClassShutter { "java.lang.ProcessImpl", "java.lang.UNIXProcess", "java.io.File", + "java.io.FileDescriptor", "java.io.FileInputStream", "java.io.FileOutputStream", "java.io.PrintStream", @@ -113,6 +114,7 @@ object RhinoClassShutter : ClassShutter { "com.script", "org.mozilla", "sun", + "libcore", ).let { ClassNameMatcher(it) } }