Преглед изворни кода

[优化] 书籍详情界面菜单可选重新获取最新详情与正文

HapeLee пре 8 месеци
родитељ
комит
3b8083bc28

+ 4 - 0
app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt

@@ -284,6 +284,10 @@ class BookInfoActivity :
                 refreshBook()
             }
 
+            R.id.menu_sync_remote -> {
+                viewModel.syncFromRemote()
+            }
+
             R.id.menu_login -> viewModel.bookSource?.let {
                 startActivity<SourceLoginActivity> {
                     putExtra("type", "bookSource")

+ 36 - 0
app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt

@@ -155,6 +155,42 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
         }.start()
     }
 
+    fun syncFromRemote() {
+        val book = bookData.value ?: return
+        if (!book.isLocal) return
+
+        val remoteUrl = book.getRemoteUrl() ?: return
+
+        execute {
+            waitDialogData.postValue(true)
+            val bookWebDav = AppWebDav.defaultBookWebDav
+                ?: throw NoStackTraceException("webDav没有配置")
+
+            val remoteBook = bookWebDav.getRemoteBook(remoteUrl)
+                ?: throw NoStackTraceException("远程文件不存在")
+
+            val downloadBookUri = bookWebDav.downloadRemoteBook(remoteBook)
+
+            val importedBooks = LocalBook.importFiles(downloadBookUri)
+            val newBook = importedBooks.firstOrNull() ?: throw NoStackTraceException("导入失败")
+
+            newBook.durChapterIndex = book.durChapterIndex
+            newBook.durChapterPos = book.durChapterPos
+            newBook.order = book.order
+            newBook.group = book.group
+
+            appDb.bookDao.delete(book)
+            appDb.bookDao.insert(newBook)
+
+            loadChapter(newBook)
+
+            bookData.postValue(newBook)
+            context.toastOnUi("同步完成")
+        }.onFinally {
+            waitDialogData.postValue(false)
+        }
+    }
+
     fun loadBookInfo(
         book: Book,
         canReName: Boolean = true,

+ 5 - 0
app/src/main/res/menu/book_info.xml

@@ -19,6 +19,11 @@
         android:title="@string/upload_to_remote"
         app:showAsAction="never" />
 
+    <item
+        android:id="@+id/menu_sync_remote"
+        android:title="@string/re_sync_webdav"
+        app:showAsAction="never" />
+
     <item
         android:id="@+id/menu_refresh"
         android:title="@string/refresh"