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" /> + +