Horis 3 anni fa
parent
commit
aa8b835875

+ 1 - 1
app/src/main/java/io/legado/app/api/controller/BookController.kt

@@ -200,7 +200,7 @@ object BookController {
     fun saveBook(postData: String?): ReturnData {
     fun saveBook(postData: String?): ReturnData {
         val returnData = ReturnData()
         val returnData = ReturnData()
         GSON.fromJsonObject<Book>(postData).getOrNull()?.let { book ->
         GSON.fromJsonObject<Book>(postData).getOrNull()?.let { book ->
-            appDb.bookDao.insert(book)
+            book.save()
             AppWebDav.uploadBookProgress(book)
             AppWebDav.uploadBookProgress(book)
             return returnData.setData("")
             return returnData.setData("")
         }
         }

+ 11 - 1
app/src/main/java/io/legado/app/help/storage/Restore.kt

@@ -62,7 +62,17 @@ object Restore {
                     .forEach { book ->
                     .forEach { book ->
                         book.coverUrl = LocalBook.getCoverPath(book)
                         book.coverUrl = LocalBook.getCoverPath(book)
                     }
                     }
-                appDb.bookDao.insert(*it.toTypedArray())
+                val updateBooks = arrayListOf<Book>()
+                val newBooks = arrayListOf<Book>()
+                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<Bookmark>(path, "bookmark.json")?.let {
             fileToListT<Bookmark>(path, "bookmark.json")?.let {
                 appDb.bookmarkDao.insert(*it.toTypedArray())
                 appDb.bookmarkDao.insert(*it.toTypedArray())

+ 9 - 7
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 cacheBook = CacheBook.getOrCreate(bookUrl) ?: return@execute
             val chapterCount = appDb.bookChapterDao.getChapterCount(bookUrl)
             val chapterCount = appDb.bookChapterDao.getChapterCount(bookUrl)
             if (chapterCount == 0) {
             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) {
             val end2 = if (end == 0) {
                 appDb.bookChapterDao.getChapterCount(bookUrl)
                 appDb.bookChapterDao.getChapterCount(bookUrl)