diff --git a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt index 5d3d38e1c..39ab71c99 100644 --- a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt +++ b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt @@ -189,21 +189,31 @@ object WebBook { } } - suspend fun getChapterListAwait( - bookSource: BookSource, - book: Book, - runPerJs: Boolean = false - ): Result> { - book.type = bookSource.getBookType() + fun runPreUpdateJs(bookSource: BookSource, book: Book): Result { return kotlin.runCatching { val preUpdateJs = bookSource.ruleToc?.preUpdateJs - if (runPerJs && !preUpdateJs.isNullOrBlank()) { + if (!preUpdateJs.isNullOrBlank()) { kotlin.runCatching { AnalyzeRule(book, bookSource).evalJS(preUpdateJs) }.onFailure { AppLog.put("执行preUpdateJs规则失败 书源:${bookSource.bookSourceName}", it) throw it } + return@runCatching true + } + return@runCatching false + } + } + + suspend fun getChapterListAwait( + bookSource: BookSource, + book: Book, + runPerJs: Boolean = false + ): Result> { + book.type = bookSource.getBookType() + return kotlin.runCatching { + if (runPerJs) { + runPreUpdateJs(bookSource, book).getOrThrow() } if (book.bookUrl == book.tocUrl && !book.tocHtml.isNullOrEmpty()) { BookChapterList.analyzeChapterList( diff --git a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt index 485bd6997..347a05d37 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt @@ -122,10 +122,11 @@ class MainViewModel(application: Application) : BaseViewModel(application) { upTocAdd(bookUrl) execute(context = upTocPool) { val oldBook = book.copy() + WebBook.runPreUpdateJs(source, book) if (book.tocUrl.isBlank()) { WebBook.getBookInfoAwait(source, book) } - val toc = WebBook.getChapterListAwait(source, book, true).getOrThrow() + val toc = WebBook.getChapterListAwait(source, book).getOrThrow() book.removeType(BookType.updateError) if (book.bookUrl == bookUrl) { appDb.bookDao.update(book)