pull/2468/head
kunfei 3 years ago
parent edf0c9170c
commit de78eb233b
  1. 3
      app/src/main/java/io/legado/app/help/book/BookExtensions.kt
  2. 56
      app/src/main/java/io/legado/app/ui/main/MainViewModel.kt

@ -53,6 +53,9 @@ val Book.isOnLineTxt: Boolean
return !isLocal && type and BookType.text > 0
}
val Book.isUpError: Boolean
get() = type and BookType.updateError > 0
fun Book.contains(word: String?): Boolean {
if (word.isNullOrEmpty()) {
return true

@ -12,10 +12,7 @@ import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookSource
import io.legado.app.help.AppWebDav
import io.legado.app.help.DefaultData
import io.legado.app.help.book.BookHelp
import io.legado.app.help.book.addType
import io.legado.app.help.book.isLocal
import io.legado.app.help.book.removeType
import io.legado.app.help.book.*
import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.LocalConfig
import io.legado.app.model.CacheBook
@ -113,35 +110,42 @@ class MainViewModel(application: Application) : BaseViewModel(application) {
}
val source = appDb.bookSourceDao.getBookSource(book.origin)
if (source == null) {
book.addType(BookType.updateError)
appDb.bookDao.update(book)
if (!book.isUpError) {
book.addType(BookType.updateError)
appDb.bookDao.update(book)
}
waitUpTocBooks.remove(book.bookUrl)
return
}
waitUpTocBooks.remove(bookUrl)
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).getOrThrow()
book.removeType(BookType.updateError)
if (book.bookUrl == bookUrl) {
appDb.bookDao.update(book)
} else {
upTocAdd(book.bookUrl)
appDb.bookDao.insert(book)
BookHelp.updateCacheFolder(oldBook, book)
kotlin.runCatching {
val oldBook = book.copy()
WebBook.runPreUpdateJs(source, book)
if (book.tocUrl.isBlank()) {
WebBook.getBookInfoAwait(source, book)
}
val toc = WebBook.getChapterListAwait(source, book).getOrThrow()
book.removeType(BookType.updateError)
if (book.bookUrl == bookUrl) {
appDb.bookDao.update(book)
} else {
upTocAdd(book.bookUrl)
appDb.bookDao.insert(book)
BookHelp.updateCacheFolder(oldBook, book)
}
appDb.bookChapterDao.delByBook(bookUrl)
appDb.bookChapterDao.insert(*toc.toTypedArray())
addDownload(source, book)
}.onFailure {
AppLog.put("${book.name} 更新目录失败\n${it.localizedMessage}", it)
//这里可能因为时间太长书籍信息已经更改,所以重新获取
appDb.bookDao.getBook(book.bookUrl)?.let { book ->
book.addType(BookType.updateError)
appDb.bookDao.update(book)
}
}
appDb.bookChapterDao.delByBook(bookUrl)
appDb.bookChapterDao.insert(*toc.toTypedArray())
addDownload(source, book)
}.onError(upTocPool) {
book.addType(BookType.updateError)
appDb.bookDao.update(book)
AppLog.put("${book.name} 更新目录失败\n${it.localizedMessage}", it)
}.onCancel(upTocPool) {
upTocCancel(bookUrl)
upTocCancel(book.bookUrl)

Loading…
Cancel
Save