From 3601ba117870046e5ecc7718dabd315b7f04e149 Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Mon, 25 Sep 2023 19:44:19 +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 --- .../java/io/legado/app/data/dao/BookDao.kt | 6 ++++ .../ui/book/manage/BookshelfManageActivity.kt | 31 +++++++++++++++++++ .../book/manage/BookshelfManageViewModel.kt | 28 +++++++++++++++++ app/src/main/res/menu/bookshelf_manage.xml | 4 +++ app/src/main/res/values-es-rES/strings.xml | 1 + app/src/main/res/values-ja-rJP/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 1 + app/src/main/res/values-vi/strings.xml | 3 +- app/src/main/res/values-zh-rHK/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values-zh/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 12 files changed, 78 insertions(+), 1 deletion(-) 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 cecc2578c0b4..ae79b3c40369 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 @@ -4,6 +4,7 @@ import androidx.room.* import io.legado.app.constant.BookType import io.legado.app.data.entities.Book import io.legado.app.data.entities.BookGroup +import io.legado.app.data.entities.BookSource import kotlinx.coroutines.flow.Flow @Dao @@ -81,6 +82,11 @@ interface BookDao { @Query("SELECT * FROM books WHERE name = :name and author = :author") fun getBook(name: String, author: String): Book? + @Query("""select distinct bs.* from books, book_sources bs + where origin == bookSourceUrl and origin not like '${BookType.localTag}%' + and origin not like '${BookType.webDavTag}%'""") + fun getAllUseBookSource(): List + @Query("SELECT * FROM books WHERE name = :name and origin = :origin") fun getBookByOrigin(name: String, origin: String): Book? diff --git a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageActivity.kt b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageActivity.kt index 7da1ca368394..f70717a02020 100644 --- a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageActivity.kt @@ -21,6 +21,8 @@ import io.legado.app.data.entities.Book import io.legado.app.data.entities.BookGroup import io.legado.app.data.entities.BookSource import io.legado.app.databinding.ActivityArrangeBookBinding +import io.legado.app.databinding.DialogEditTextBinding +import io.legado.app.help.DirectLinkUpload import io.legado.app.help.book.contains import io.legado.app.help.book.isLocal import io.legado.app.help.config.AppConfig @@ -31,6 +33,7 @@ import io.legado.app.lib.theme.primaryTextColor import io.legado.app.ui.book.group.GroupManageDialog import io.legado.app.ui.book.group.GroupSelectDialog import io.legado.app.ui.book.info.BookInfoActivity +import io.legado.app.ui.file.HandleFileContract import io.legado.app.ui.widget.SelectActionBar import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.ui.widget.recycler.DragSelectTouchHelper @@ -70,6 +73,23 @@ class BookshelfManageActivity : } private var books: List? = null private val waitDialog by lazy { WaitDialog(this) } + private val exportDir = registerForActivityResult(HandleFileContract()) { + it.uri?.let { uri -> + alert(R.string.export_success) { + if (uri.toString().isAbsUrl()) { + setMessage(DirectLinkUpload.getSummary()) + } + val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply { + editView.hint = getString(R.string.path) + editView.setText(uri.toString()) + } + customView { alertBinding.root } + okButton { + sendToClip(uri.toString()) + } + } + } + } override fun onActivityCreated(savedInstanceState: Bundle?) { viewModel.groupId = intent.getLongExtra("groupId", -1) @@ -255,6 +275,17 @@ class BookshelfManageActivity : adapter.notifyItemRangeChanged(0, adapter.itemCount) } + R.id.menu_export_all_use_book_source -> viewModel.saveAllUseBookSourceToFile { file -> + exportDir.launch { + mode = HandleFileContract.EXPORT + fileData = HandleFileContract.FileData( + "bookSource.json", + file, + "application/json" + ) + } + } + else -> if (item.groupId == R.id.menu_group) { viewModel.groupName = item.title.toString() upTitle() diff --git a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageViewModel.kt b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageViewModel.kt index 7ac618269d34..294d40006aed 100644 --- a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageViewModel.kt @@ -14,7 +14,15 @@ import io.legado.app.help.config.AppConfig import io.legado.app.help.coroutine.Coroutine import io.legado.app.model.localBook.LocalBook import io.legado.app.model.webBook.WebBook +import io.legado.app.utils.FileUtils +import io.legado.app.utils.GSON +import io.legado.app.utils.stackTraceStr +import io.legado.app.utils.toastOnUi +import io.legado.app.utils.writeToOutputStream import kotlinx.coroutines.delay +import java.io.BufferedOutputStream +import java.io.File +import java.io.FileOutputStream class BookshelfManageViewModel(application: Application) : BaseViewModel(application) { @@ -50,6 +58,26 @@ class BookshelfManageViewModel(application: Application) : BaseViewModel(applica } } + @Suppress("BlockingMethodInNonBlockingContext") + fun saveAllUseBookSourceToFile(success: (file: File) -> Unit) { + execute { + val path = "${context.filesDir}/shareBookSource.json" + FileUtils.delete(path) + val file = FileUtils.createFileWithReplace(path) + val sources = appDb.bookDao.getAllUseBookSource() + FileOutputStream(file).use { out -> + BufferedOutputStream(out, 64 * 1024).use { + GSON.writeToOutputStream(it, sources) + } + } + file + }.onSuccess { + success.invoke(it) + }.onError { + context.toastOnUi(it.stackTraceStr) + } + } + fun changeSource(books: List, source: BookSource) { batchChangeSourceCoroutine?.cancel() batchChangeSourceCoroutine = execute { diff --git a/app/src/main/res/menu/bookshelf_manage.xml b/app/src/main/res/menu/bookshelf_manage.xml index c682bf1e336d..c359f2231928 100644 --- a/app/src/main/res/menu/bookshelf_manage.xml +++ b/app/src/main/res/menu/bookshelf_manage.xml @@ -20,6 +20,10 @@ + + 等待导出 默认主页 显示快速滚动条 + 导出所有书的书源 diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 735bb64be85a..b95316f2dc25 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1133,4 +1133,5 @@ 等待导出 默认主页 显示快速滚动条 + 导出所有书的书源 diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 84db3bdd0ad3..4a571f5d3c97 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1133,4 +1133,5 @@ 等待导出 默认主页 显示快速滚动条 + 导出所有书的书源 diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 392606ee3dc3..9820488764e8 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1128,4 +1128,5 @@ Còn 点击书名打开详情 等待导出 显示快速滚动条 - \ 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 e5dd7bf30ae6..bf9dc1e1aa30 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -1129,4 +1129,5 @@ 点击书名打开详情 等待导出 显示快速滚动条 + 导出所有书的书源 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index acd80adf6e5c..df17cc071543 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1131,4 +1131,5 @@ 点击书名打开详情 等待导出 显示快速滚动条 + 导出所有书的书源 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 13e04a361686..fa28465db241 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1131,4 +1131,5 @@ 点击书名打开详情 等待导出 显示快速滚动条 + 导出所有书的书源 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 26217981d816..ac7bd5c1cc97 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1133,4 +1133,5 @@ 等待导出 默认主页 显示快速滚动条 + 导出所有书的书源