diff --git a/app/src/main/java/io/legado/app/data/dao/BookDao.kt b/app/src/main/java/io/legado/app/data/dao/BookDao.kt index 30ee3c0d6..cecc2578c 100644 --- a/app/src/main/java/io/legado/app/data/dao/BookDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/BookDao.kt @@ -2,7 +2,6 @@ package io.legado.app.data.dao import androidx.room.* import io.legado.app.constant.BookType -import io.legado.app.data.appDb import io.legado.app.data.entities.Book import io.legado.app.data.entities.BookGroup import kotlinx.coroutines.flow.Flow @@ -12,14 +11,14 @@ interface BookDao { fun flowByGroup(groupId: Long): Flow> { return when (groupId) { - BookGroup.IdRoot -> appDb.bookDao.flowRoot() - BookGroup.IdAll -> appDb.bookDao.flowAll() - BookGroup.IdLocal -> appDb.bookDao.flowLocal() - BookGroup.IdAudio -> appDb.bookDao.flowAudio() - BookGroup.IdNetNone -> appDb.bookDao.flowNetNoGroup() - BookGroup.IdLocalNone -> appDb.bookDao.flowLocalNoGroup() - BookGroup.IdError -> appDb.bookDao.flowUpdateError() - else -> appDb.bookDao.flowByUserGroup(groupId) + BookGroup.IdRoot -> flowRoot() + BookGroup.IdAll -> flowAll() + BookGroup.IdLocal -> flowLocal() + BookGroup.IdAudio -> flowAudio() + BookGroup.IdNetNone -> flowNetNoGroup() + BookGroup.IdLocalNone -> flowLocalNoGroup() + BookGroup.IdError -> flowUpdateError() + else -> flowByUserGroup(groupId) } } diff --git a/app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkActivity.kt b/app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkActivity.kt index d3d152d2f..7d54305b8 100644 --- a/app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkActivity.kt @@ -10,7 +10,6 @@ import io.legado.app.data.appDb import io.legado.app.data.entities.Bookmark import io.legado.app.databinding.ActivityAllBookmarkBinding import io.legado.app.ui.file.HandleFileContract -import io.legado.app.utils.launch import io.legado.app.utils.showDialogFragment import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.launch @@ -25,7 +24,10 @@ class AllBookmarkActivity : VMBaseActivity - viewModel.saveToFile(uri) + when (it.requestCode) { + 1 -> viewModel.exportBookmark(uri) + 2 -> viewModel.exportBookmarkMd(uri) + } } } @@ -50,7 +52,13 @@ class AllBookmarkActivity : VMBaseActivity exportDir.launch() + R.id.menu_export -> exportDir.launch { + requestCode = 1 + } + + R.id.menu_export_md -> exportDir.launch { + requestCode = 2 + } } return super.onCompatOptionsItemSelected(item) } 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 7531eef0c..32284246a 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 @@ -21,10 +21,10 @@ class AllBookmarkViewModel(application: Application) : BaseViewModel(application /** * 导出书签 */ - fun saveToFile(treeUri: Uri) { + fun exportBookmark(treeUri: Uri) { execute { val dateFormat = SimpleDateFormat("yyMMddHHmmss", Locale.getDefault()) - val fileName = "bookmark-${dateFormat.format(Date())}" + val fileName = "bookmark-${dateFormat.format(Date())}.json" val dirDoc = FileDoc.fromUri(treeUri, true) dirDoc.createFileIfNotExist(fileName).openOutputStream().getOrThrow().use { GSON.writeToOutputStream(it, appDb.bookmarkDao.all) @@ -36,4 +36,32 @@ class AllBookmarkViewModel(application: Application) : BaseViewModel(application } } + + fun exportBookmarkMd(treeUri: Uri) { + execute { + val dateFormat = SimpleDateFormat("yyMMddHHmmss", Locale.getDefault()) + val fileName = "bookmark-${dateFormat.format(Date())}.md" + val dirDoc = FileDoc.fromUri(treeUri, true) + val fileDoc = dirDoc.createFileIfNotExist(fileName).openOutputStream().getOrThrow() + fileDoc.use { outputStream -> + var name = "" + var author = "" + appDb.bookmarkDao.all.forEach { + if (it.bookName != name && it.bookAuthor != author) { + name = it.bookName + author = it.bookAuthor + outputStream.write("## ${it.bookName} ${it.bookAuthor}\n\n".toByteArray()) + } + outputStream.write("#### ${it.chapterName}\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("导出成功") + } + } + } \ No newline at end of file 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 023c8520e..755b2edee 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 @@ -76,7 +76,7 @@ class TocViewModel(application: Application) : BaseViewModel(application) { execute { val book = bookData.value ?: throw NoStackTraceException(context.getString(R.string.no_book)) - val fileName = "bookmark-${book.name} ${book.author}" + val fileName = "bookmark-${book.name} ${book.author}.json" val doc = FileDoc.fromUri(treeUri, true) doc.createFileIfNotExist(fileName).writeText( GSON.toJson( diff --git a/app/src/main/res/menu/bookmark.xml b/app/src/main/res/menu/bookmark.xml index f5843a872..f955a6b81 100644 --- a/app/src/main/res/menu/bookmark.xml +++ b/app/src/main/res/menu/bookmark.xml @@ -5,4 +5,8 @@ android:id="@+id/menu_export" android:title="@string/export" /> + + \ No newline at end of file diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index e07fe3b28..948acfb64 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -1124,4 +1124,5 @@ 起效的替换 导出书籍 正在导出(%1$s),还有%2$d本待导出 + 导出(MD) diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index e6b419dbe..09346afe6 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1127,4 +1127,5 @@ 起效的替换 导出书籍 正在导出(%1$s),还有%2$d本待导出 + 导出(MD) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index baa601947..62b16481e 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1127,4 +1127,5 @@ 起效的替换 导出书籍 正在导出(%1$s),还有%2$d本待导出 + 导出(MD) diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 7c3da8ed0..937c8b02c 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1123,4 +1123,5 @@ Còn 起效的替换 导出书籍 正在导出(%1$s),还有%2$d本待导出 + 导出(MD) \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 120d20d5d..d3b6b8231 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -1124,4 +1124,5 @@ 起效的替换 导出书籍 正在导出(%1$s),还有%2$d本待导出 + 导出(MD) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 4b01f8df6..bf4303581 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1126,4 +1126,5 @@ 起效的替换 导出书籍 正在导出(%1$s),还有%2$d本待导出 + 导出(MD) diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 04a8092b9..0ec77bfdc 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1126,4 +1126,5 @@ 起效的替换 导出书籍 正在导出(%1$s),还有%2$d本待导出 + 导出(MD) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5d339694e..744f5e0fa 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1127,4 +1127,5 @@ 起效的替换 导出书籍 正在导出(%1$s),还有%2$d本待导出 + 导出(MD)