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 a7df33ffe..73a737bb1 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 @@ -18,6 +18,7 @@ import io.legado.app.help.BookHelp import io.legado.app.help.coroutine.Coroutine import io.legado.app.model.BookCover import io.legado.app.model.ReadBook +import io.legado.app.model.analyzeRule.AnalyzeRule import io.legado.app.model.localBook.LocalBook import io.legado.app.model.webBook.WebBook import io.legado.app.utils.postEvent @@ -153,6 +154,10 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { chapterListData.postValue(emptyList()) } else { bookSource?.let { bookSource -> + val preUpdateJs = bookSource.ruleToc?.preUpdateJs + if (!preUpdateJs.isNullOrBlank()) { + AnalyzeRule(book, bookSource).evalJS(preUpdateJs) + } WebBook.getChapterList(this, bookSource, book) .onSuccess(IO) { if (inBookshelf) { 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 eee1250eb..ef1ea642a 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 @@ -21,6 +21,7 @@ import io.legado.app.help.config.AppConfig import io.legado.app.help.coroutine.Coroutine import io.legado.app.model.ReadAloud import io.legado.app.model.ReadBook +import io.legado.app.model.analyzeRule.AnalyzeRule import io.legado.app.model.localBook.LocalBook import io.legado.app.model.webBook.WebBook import io.legado.app.service.BaseReadAloudService @@ -32,6 +33,8 @@ import io.legado.app.utils.postEvent import io.legado.app.utils.toStringArray import io.legado.app.utils.toastOnUi import kotlinx.coroutines.Dispatchers.IO +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext /** * 阅读界面数据处理 @@ -144,16 +147,22 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { } } else { ReadBook.bookSource?.let { - WebBook.getChapterList(viewModelScope, it, book) - .onSuccess(IO) { cList -> - appDb.bookChapterDao.insert(*cList.toTypedArray()) - appDb.bookDao.update(book) - ReadBook.chapterSize = cList.size - ReadBook.upMsg(null) - ReadBook.loadContent(resetPageOffset = true) - }.onError { - ReadBook.upMsg(context.getString(R.string.error_load_toc)) + viewModelScope.launch(IO) { + val preUpdateJs = it.ruleToc?.preUpdateJs + if (!preUpdateJs.isNullOrBlank()) { + AnalyzeRule(book, it).evalJS(preUpdateJs) } + WebBook.getChapterList(viewModelScope, it, book) + .onSuccess(IO) { cList -> + appDb.bookChapterDao.insert(*cList.toTypedArray()) + appDb.bookDao.update(book) + ReadBook.chapterSize = cList.size + ReadBook.upMsg(null) + ReadBook.loadContent(resetPageOffset = true) + }.onError { + ReadBook.upMsg(context.getString(R.string.error_load_toc)) + } + } } } }