优化
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package io.legado.app.model.webBook
|
package io.legado.app.model.webBook
|
||||||
|
|
||||||
|
import io.legado.app.constant.AppLog
|
||||||
import io.legado.app.data.entities.Book
|
import io.legado.app.data.entities.Book
|
||||||
import io.legado.app.data.entities.BookChapter
|
import io.legado.app.data.entities.BookChapter
|
||||||
import io.legado.app.data.entities.BookSource
|
import io.legado.app.data.entities.BookSource
|
||||||
@@ -9,6 +10,7 @@ import io.legado.app.help.book.getBookType
|
|||||||
import io.legado.app.help.coroutine.Coroutine
|
import io.legado.app.help.coroutine.Coroutine
|
||||||
import io.legado.app.help.http.StrResponse
|
import io.legado.app.help.http.StrResponse
|
||||||
import io.legado.app.model.Debug
|
import io.legado.app.model.Debug
|
||||||
|
import io.legado.app.model.analyzeRule.AnalyzeRule
|
||||||
import io.legado.app.model.analyzeRule.AnalyzeUrl
|
import io.legado.app.model.analyzeRule.AnalyzeUrl
|
||||||
import io.legado.app.model.analyzeRule.RuleData
|
import io.legado.app.model.analyzeRule.RuleData
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
@@ -179,19 +181,30 @@ object WebBook {
|
|||||||
scope: CoroutineScope,
|
scope: CoroutineScope,
|
||||||
bookSource: BookSource,
|
bookSource: BookSource,
|
||||||
book: Book,
|
book: Book,
|
||||||
|
runPerJs: Boolean = false,
|
||||||
context: CoroutineContext = Dispatchers.IO
|
context: CoroutineContext = Dispatchers.IO
|
||||||
): Coroutine<List<BookChapter>> {
|
): Coroutine<List<BookChapter>> {
|
||||||
return Coroutine.async(scope, context) {
|
return Coroutine.async(scope, context) {
|
||||||
getChapterListAwait(bookSource, book).getOrThrow()
|
getChapterListAwait(bookSource, book, runPerJs).getOrThrow()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun getChapterListAwait(
|
suspend fun getChapterListAwait(
|
||||||
bookSource: BookSource,
|
bookSource: BookSource,
|
||||||
book: Book,
|
book: Book,
|
||||||
|
runPerJs: Boolean = false
|
||||||
): Result<List<BookChapter>> {
|
): Result<List<BookChapter>> {
|
||||||
book.type = bookSource.getBookType()
|
book.type = bookSource.getBookType()
|
||||||
return kotlin.runCatching {
|
return kotlin.runCatching {
|
||||||
|
val preUpdateJs = bookSource.ruleToc?.preUpdateJs
|
||||||
|
if (runPerJs && !preUpdateJs.isNullOrBlank()) {
|
||||||
|
kotlin.runCatching {
|
||||||
|
AnalyzeRule(book, bookSource).evalJS(preUpdateJs)
|
||||||
|
}.onFailure {
|
||||||
|
AppLog.put("执行preUpdateJs规则失败 书源:${bookSource.bookSourceName}", it)
|
||||||
|
throw it
|
||||||
|
}
|
||||||
|
}
|
||||||
if (book.bookUrl == book.tocUrl && !book.tocHtml.isNullOrEmpty()) {
|
if (book.bookUrl == book.tocUrl && !book.tocHtml.isNullOrEmpty()) {
|
||||||
BookChapterList.analyzeChapterList(
|
BookChapterList.analyzeChapterList(
|
||||||
bookSource = bookSource,
|
bookSource = bookSource,
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import io.legado.app.help.coroutine.Coroutine
|
|||||||
import io.legado.app.lib.webdav.ObjectNotFoundException
|
import io.legado.app.lib.webdav.ObjectNotFoundException
|
||||||
import io.legado.app.model.BookCover
|
import io.legado.app.model.BookCover
|
||||||
import io.legado.app.model.ReadBook
|
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.localBook.LocalBook
|
||||||
import io.legado.app.model.remote.RemoteBookWebDav
|
import io.legado.app.model.remote.RemoteBookWebDav
|
||||||
import io.legado.app.model.webBook.WebBook
|
import io.legado.app.model.webBook.WebBook
|
||||||
@@ -191,11 +190,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
|
|||||||
} else {
|
} else {
|
||||||
bookSource?.let { bookSource ->
|
bookSource?.let { bookSource ->
|
||||||
val oldBook = book.copy()
|
val oldBook = book.copy()
|
||||||
val preUpdateJs = bookSource.ruleToc?.preUpdateJs
|
WebBook.getChapterList(this, bookSource, book, true)
|
||||||
if (!preUpdateJs.isNullOrBlank()) {
|
|
||||||
AnalyzeRule(book, bookSource).evalJS(preUpdateJs)
|
|
||||||
}
|
|
||||||
WebBook.getChapterList(this, bookSource, book)
|
|
||||||
.onSuccess(IO) {
|
.onSuccess(IO) {
|
||||||
if (inBookshelf) {
|
if (inBookshelf) {
|
||||||
if (oldBook.bookUrl == book.bookUrl) {
|
if (oldBook.bookUrl == book.bookUrl) {
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import io.legado.app.help.config.AppConfig
|
|||||||
import io.legado.app.help.coroutine.Coroutine
|
import io.legado.app.help.coroutine.Coroutine
|
||||||
import io.legado.app.model.ReadAloud
|
import io.legado.app.model.ReadAloud
|
||||||
import io.legado.app.model.ReadBook
|
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.localBook.LocalBook
|
||||||
import io.legado.app.model.webBook.WebBook
|
import io.legado.app.model.webBook.WebBook
|
||||||
import io.legado.app.service.BaseReadAloudService
|
import io.legado.app.service.BaseReadAloudService
|
||||||
@@ -154,17 +153,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
|
|||||||
ReadBook.bookSource?.let {
|
ReadBook.bookSource?.let {
|
||||||
viewModelScope.launch(IO) {
|
viewModelScope.launch(IO) {
|
||||||
val oldBook = book.copy()
|
val oldBook = book.copy()
|
||||||
val preUpdateJs = it.ruleToc?.preUpdateJs
|
WebBook.getChapterList(viewModelScope, it, book, true)
|
||||||
if (!preUpdateJs.isNullOrBlank()) {
|
|
||||||
val source = it
|
|
||||||
kotlin.runCatching {
|
|
||||||
AnalyzeRule(book, it).evalJS(preUpdateJs)
|
|
||||||
}.onFailure {
|
|
||||||
ReadBook.upMsg("执行preUpdateJs规则失败")
|
|
||||||
AppLog.put("执行preUpdateJs规则失败 书源:${source.bookSourceName}", it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
WebBook.getChapterList(viewModelScope, it, book)
|
|
||||||
.onSuccess(IO) { cList ->
|
.onSuccess(IO) { cList ->
|
||||||
if (oldBook.bookUrl == book.bookUrl) {
|
if (oldBook.bookUrl == book.bookUrl) {
|
||||||
appDb.bookDao.update(book)
|
appDb.bookDao.update(book)
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ import io.legado.app.help.book.removeType
|
|||||||
import io.legado.app.help.config.AppConfig
|
import io.legado.app.help.config.AppConfig
|
||||||
import io.legado.app.help.config.LocalConfig
|
import io.legado.app.help.config.LocalConfig
|
||||||
import io.legado.app.model.CacheBook
|
import io.legado.app.model.CacheBook
|
||||||
import io.legado.app.model.analyzeRule.AnalyzeRule
|
|
||||||
import io.legado.app.model.webBook.WebBook
|
import io.legado.app.model.webBook.WebBook
|
||||||
import io.legado.app.service.CacheBookService
|
import io.legado.app.service.CacheBookService
|
||||||
import io.legado.app.utils.postEvent
|
import io.legado.app.utils.postEvent
|
||||||
@@ -123,14 +122,10 @@ class MainViewModel(application: Application) : BaseViewModel(application) {
|
|||||||
upTocAdd(bookUrl)
|
upTocAdd(bookUrl)
|
||||||
execute(context = upTocPool) {
|
execute(context = upTocPool) {
|
||||||
val oldBook = book.copy()
|
val oldBook = book.copy()
|
||||||
val preUpdateJs = source.ruleToc?.preUpdateJs
|
|
||||||
if (!preUpdateJs.isNullOrBlank()) {
|
|
||||||
AnalyzeRule(book, source).evalJS(preUpdateJs)
|
|
||||||
}
|
|
||||||
if (book.tocUrl.isBlank()) {
|
if (book.tocUrl.isBlank()) {
|
||||||
WebBook.getBookInfoAwait(source, book)
|
WebBook.getBookInfoAwait(source, book)
|
||||||
}
|
}
|
||||||
val toc = WebBook.getChapterListAwait(source, book).getOrThrow()
|
val toc = WebBook.getChapterListAwait(source, book, true).getOrThrow()
|
||||||
book.removeType(BookType.updateError)
|
book.removeType(BookType.updateError)
|
||||||
if (book.bookUrl == bookUrl) {
|
if (book.bookUrl == bookUrl) {
|
||||||
appDb.bookDao.update(book)
|
appDb.bookDao.update(book)
|
||||||
|
|||||||
Reference in New Issue
Block a user