diff --git a/app/src/main/java/io/legado/app/api/controller/BookController.kt b/app/src/main/java/io/legado/app/api/controller/BookController.kt index 38bcd35ed..d726f30db 100644 --- a/app/src/main/java/io/legado/app/api/controller/BookController.kt +++ b/app/src/main/java/io/legado/app/api/controller/BookController.kt @@ -200,7 +200,7 @@ object BookController { fun saveBook(postData: String?): ReturnData { val returnData = ReturnData() GSON.fromJsonObject(postData).getOrNull()?.let { book -> - appDb.bookDao.insert(book) + book.save() AppWebDav.uploadBookProgress(book) return returnData.setData("") } diff --git a/app/src/main/java/io/legado/app/help/storage/Restore.kt b/app/src/main/java/io/legado/app/help/storage/Restore.kt index e65c89751..a4cd61626 100644 --- a/app/src/main/java/io/legado/app/help/storage/Restore.kt +++ b/app/src/main/java/io/legado/app/help/storage/Restore.kt @@ -62,7 +62,17 @@ object Restore { .forEach { book -> book.coverUrl = LocalBook.getCoverPath(book) } - appDb.bookDao.insert(*it.toTypedArray()) + val updateBooks = arrayListOf() + val newBooks = arrayListOf() + it.forEach { book -> + if (appDb.bookDao.has(book.bookUrl) == true) { + updateBooks.add(book) + } else { + newBooks.add(book) + } + } + appDb.bookDao.update(*updateBooks.toTypedArray()) + appDb.bookDao.insert(*newBooks.toTypedArray()) } fileToListT(path, "bookmark.json")?.let { appDb.bookmarkDao.insert(*it.toTypedArray()) diff --git a/app/src/main/java/io/legado/app/service/CacheBookService.kt b/app/src/main/java/io/legado/app/service/CacheBookService.kt index 2a3563ec6..be81e8d56 100644 --- a/app/src/main/java/io/legado/app/service/CacheBookService.kt +++ b/app/src/main/java/io/legado/app/service/CacheBookService.kt @@ -91,13 +91,15 @@ class CacheBookService : BaseService() { val cacheBook = CacheBook.getOrCreate(bookUrl) ?: return@execute val chapterCount = appDb.bookChapterDao.getChapterCount(bookUrl) if (chapterCount == 0) { - WebBook.getChapterListAwait(cacheBook.bookSource, cacheBook.book) - .onFailure { - AppLog.put("缓存书籍没有目录且加载目录失败\n${it.localizedMessage}", it) - appCtx.toastOnUi("缓存书籍没有目录且加载目录失败\n${it.localizedMessage}") - }.getOrNull()?.let { toc -> - appDb.bookChapterDao.insert(*toc.toTypedArray()) - } + val name = cacheBook.book.name + WebBook.getChapterListAwait(cacheBook.bookSource, cacheBook.book).onFailure { + cacheBook.book.totalChapterNum = 0 + AppLog.put("《$name》目录为空且加载目录失败\n${it.localizedMessage}", it) + appCtx.toastOnUi("《$name》目录为空且加载目录失败\n${it.localizedMessage}") + }.getOrNull()?.let { toc -> + appDb.bookChapterDao.insert(*toc.toTypedArray()) + } + cacheBook.book.save() } val end2 = if (end == 0) { appDb.bookChapterDao.getChapterCount(bookUrl)