kunfei 4 лет назад
Родитель
Сommit
f71da932b7

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

@@ -5,6 +5,7 @@ import io.legado.app.api.ReturnData
 import io.legado.app.constant.PreferKey
 import io.legado.app.data.appDb
 import io.legado.app.data.entities.Book
+import io.legado.app.data.entities.BookProgress
 import io.legado.app.data.entities.BookSource
 import io.legado.app.help.BookHelp
 import io.legado.app.help.CacheManager
@@ -209,6 +210,27 @@ object BookController {
         return returnData.setErrorMsg("格式不对")
     }
 
+    /**
+     * 保存进度
+     */
+    fun saveBookProgress(postData: String?): ReturnData {
+        val returnData = ReturnData()
+        GSON.fromJsonObject<BookProgress>(postData).getOrNull()?.let { bookProgress ->
+            appDb.bookDao.getBook(bookProgress.name, bookProgress.author)?.let { book ->
+                book.durChapterIndex = bookProgress.durChapterIndex
+                book.durChapterPos = bookProgress.durChapterPos
+                appDb.bookDao.update(book)
+                AppWebDav.uploadBookProgress(bookProgress)
+                if (ReadBook.book?.bookUrl == book.bookUrl) {
+                    ReadBook.book = book
+                    ReadBook.durChapterIndex = book.durChapterIndex
+                }
+                return returnData.setData("")
+            }
+        }
+        return returnData.setErrorMsg("格式不对")
+    }
+
     /**
      * 添加本地书籍
      */

+ 17 - 4
app/src/main/java/io/legado/app/help/storage/AppWebDav.kt

@@ -194,15 +194,28 @@ object AppWebDav {
         Coroutine.async {
             val bookProgress = BookProgress(book)
             val json = GSON.toJson(bookProgress)
-            val url = getProgressUrl(book)
+            val url = getProgressUrl(book.name, book.author)
             WebDav(url, authorization).upload(json.toByteArray(), "application/json")
         }.onError {
             AppLog.put("上传进度失败\n${it.localizedMessage}")
         }
     }
 
-    private fun getProgressUrl(book: Book): String {
-        return bookProgressUrl + book.name + "_" + book.author + ".json"
+    fun uploadBookProgress(bookProgress: BookProgress) {
+        val authorization = authorization ?: return
+        if (!syncBookProgress) return
+        if (!NetworkUtils.isAvailable()) return
+        Coroutine.async {
+            val json = GSON.toJson(bookProgress)
+            val url = getProgressUrl(bookProgress.name, bookProgress.author)
+            WebDav(url, authorization).upload(json.toByteArray(), "application/json")
+        }.onError {
+            AppLog.put("上传进度失败\n${it.localizedMessage}")
+        }
+    }
+
+    private fun getProgressUrl(name: String, author: String): String {
+        return bookProgressUrl + name + "_" + author + ".json"
     }
 
     /**
@@ -210,7 +223,7 @@ object AppWebDav {
      */
     suspend fun getBookProgress(book: Book): BookProgress? {
         authorization?.let {
-            val url = getProgressUrl(book)
+            val url = getProgressUrl(book.name, book.author)
             kotlin.runCatching {
                 WebDav(url, it).download().let { byteArray ->
                     val json = String(byteArray)

+ 1 - 0
app/src/main/java/io/legado/app/web/HttpServer.kt

@@ -42,6 +42,7 @@ class HttpServer(port: Int) : NanoHTTPD(port) {
                         "/saveBookSources" -> BookSourceController.saveSources(postData)
                         "/deleteBookSources" -> BookSourceController.deleteSources(postData)
                         "/saveBook" -> BookController.saveBook(postData)
+                        "/saveBookProgress" -> BookController.saveBookProgress(postData)
                         "/addLocalBook" -> BookController.addLocalBook(session.parameters)
                         "/saveReadConfig" -> BookController.saveWebReadConfig(postData)
                         "/saveRssSource" -> RssSourceController.saveSource(postData)