|
|
@@ -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)
|