From 3b8083bc28b2bcc76a56a1c2a74e2b43ee9569c8 Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Thu, 5 Mar 2026 00:50:25 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E4=B9=A6=E7=B1=8D?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E7=95=8C=E9=9D=A2=E8=8F=9C=E5=8D=95=E5=8F=AF?= =?UTF-8?q?=E9=80=89=E9=87=8D=E6=96=B0=E8=8E=B7=E5=8F=96=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E4=B8=8E=E6=AD=A3=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/info/BookInfoActivity.kt | 4 +++ .../app/ui/book/info/BookInfoViewModel.kt | 36 +++++++++++++++++++ app/src/main/res/menu/book_info.xml | 5 +++ 3 files changed, 45 insertions(+) diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index 6cab43195..ea4c1b81b 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/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 { putExtra("type", "bookSource") diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt index f40fb6ac8..863daba7b 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt +++ b/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, diff --git a/app/src/main/res/menu/book_info.xml b/app/src/main/res/menu/book_info.xml index a8e445b91..4ff5405a5 100644 --- a/app/src/main/res/menu/book_info.xml +++ b/app/src/main/res/menu/book_info.xml @@ -19,6 +19,11 @@ android:title="@string/upload_to_remote" app:showAsAction="never" /> + +