From 261c94d75831c8e261e4e4a9912cc92b464f52ad Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 30 Jul 2023 22:21:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/book/bookmark/AllBookmarkViewModel.kt | 2 +- .../io/legado/app/ui/book/toc/TocActivity.kt | 13 ++++++++-- .../io/legado/app/ui/book/toc/TocViewModel.kt | 25 +++++++++++++++++++ app/src/main/res/menu/book_toc.xml | 5 ++++ 4 files changed, 42 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkViewModel.kt b/app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkViewModel.kt index 32284246a..b2557d3b6 100644 --- a/app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkViewModel.kt @@ -52,7 +52,7 @@ class AllBookmarkViewModel(application: Application) : BaseViewModel(application author = it.bookAuthor outputStream.write("## ${it.bookName} ${it.bookAuthor}\n\n".toByteArray()) } - outputStream.write("#### ${it.chapterName}\n".toByteArray()) + outputStream.write("#### ${it.chapterName}\n\n".toByteArray()) outputStream.write("###### 原文\n ${it.bookText}\n\n".toByteArray()) outputStream.write("###### 摘要\n ${it.content}\n\n".toByteArray()) } diff --git a/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt b/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt index ab8aa76be..5679cb2cd 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt @@ -44,7 +44,10 @@ class TocActivity : VMBaseActivity(), private val waitDialog by lazy { WaitDialog(this) } private val exportDir = registerForActivityResult(HandleFileContract()) { it.uri?.let { uri -> - viewModel.saveBookmark(uri) + when (it.requestCode) { + 1 -> viewModel.saveBookmark(uri) + 2 -> viewModel.saveBookmarkMd(uri) + } } } @@ -157,7 +160,13 @@ class TocActivity : VMBaseActivity(), viewModel.chapterListCallBack?.upChapterList(searchView?.query?.toString()) } - R.id.menu_export_bookmark -> exportDir.launch() + R.id.menu_export_bookmark -> exportDir.launch { + requestCode = 1 + } + + R.id.menu_export_md -> exportDir.launch { + requestCode = 2 + } R.id.menu_log -> showDialogFragment() } diff --git a/app/src/main/java/io/legado/app/ui/book/toc/TocViewModel.kt b/app/src/main/java/io/legado/app/ui/book/toc/TocViewModel.kt index 755b2edee..8914b39bb 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/TocViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/TocViewModel.kt @@ -14,6 +14,7 @@ import io.legado.app.model.localBook.LocalBook import io.legado.app.utils.FileDoc import io.legado.app.utils.GSON import io.legado.app.utils.createFileIfNotExist +import io.legado.app.utils.openOutputStream import io.legado.app.utils.toastOnUi import io.legado.app.utils.writeText @@ -90,6 +91,30 @@ class TocViewModel(application: Application) : BaseViewModel(application) { } } + fun saveBookmarkMd(treeUri: Uri) { + execute { + val book = bookData.value + ?: throw NoStackTraceException(context.getString(R.string.no_book)) + val fileName = "bookmark-${book.name} ${book.author}.md" + val treeDoc = FileDoc.fromUri(treeUri, true) + val fileDoc = treeDoc.createFileIfNotExist(fileName) + .openOutputStream() + .getOrThrow() + fileDoc.use { outputStream -> + outputStream.write("## ${book.name} ${book.author}\n\n".toByteArray()) + appDb.bookmarkDao.getByBook(book.name, book.author).forEach { + outputStream.write("#### ${it.chapterName}\n\n".toByteArray()) + outputStream.write("###### 原文\n ${it.bookText}\n\n".toByteArray()) + outputStream.write("###### 摘要\n ${it.content}\n\n".toByteArray()) + } + } + }.onError { + AppLog.put("导出失败\n${it.localizedMessage}", it, true) + }.onSuccess { + context.toastOnUi("导出成功") + } + } + interface ChapterListCallBack { fun upChapterList(searchKey: String?) diff --git a/app/src/main/res/menu/book_toc.xml b/app/src/main/res/menu/book_toc.xml index 24ca5de00..214708267 100644 --- a/app/src/main/res/menu/book_toc.xml +++ b/app/src/main/res/menu/book_toc.xml @@ -53,6 +53,11 @@ android:title="@string/export" app:showAsAction="never" /> + +