From e001398e2172dcd4c925cdf330d5f0f224ac6a3a Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Sat, 24 Jun 2023 19:12:03 +0800 Subject: [PATCH 1/3] =?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/explore/ExploreShowActivity.kt | 89 ++++++++++++++++++- .../ui/book/explore/ExploreShowViewModel.kt | 18 ++++ .../main/res/layout/dialog_page_choice.xml | 74 +++++++++++++++ app/src/main/res/menu/explore_show.xml | 8 ++ app/src/main/res/values-es-rES/strings.xml | 2 + app/src/main/res/values-ja-rJP/strings.xml | 2 + app/src/main/res/values-pt-rBR/strings.xml | 2 + app/src/main/res/values-zh-rHK/strings.xml | 2 + app/src/main/res/values-zh-rTW/strings.xml | 2 + app/src/main/res/values-zh/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 11 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/layout/dialog_page_choice.xml create mode 100644 app/src/main/res/menu/explore_show.xml diff --git a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowActivity.kt b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowActivity.kt index 161a98c38..37ea0fb87 100644 --- a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowActivity.kt @@ -1,27 +1,45 @@ package io.legado.app.ui.book.explore import android.os.Bundle +import android.view.Menu +import android.view.MenuItem import androidx.activity.viewModels import androidx.recyclerview.widget.RecyclerView import io.legado.app.R import io.legado.app.base.VMBaseActivity +import io.legado.app.constant.AppLog +import io.legado.app.data.appDb import io.legado.app.data.entities.Book import io.legado.app.data.entities.SearchBook import io.legado.app.databinding.ActivityExploreShowBinding +import io.legado.app.databinding.DialogPageChoiceBinding import io.legado.app.databinding.ViewLoadMoreBinding +import io.legado.app.help.coroutine.Coroutine +import io.legado.app.lib.dialogs.alert +import io.legado.app.lib.theme.backgroundColor +import io.legado.app.model.webBook.WebBook +import io.legado.app.ui.book.group.GroupSelectDialog import io.legado.app.ui.book.info.BookInfoActivity +import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.ui.widget.recycler.LoadMoreView import io.legado.app.ui.widget.recycler.VerticalDivider +import io.legado.app.utils.showDialogFragment import io.legado.app.utils.startActivity import io.legado.app.utils.viewbindingdelegate.viewBinding +import kotlinx.coroutines.Dispatchers.Main +import kotlinx.coroutines.launch class ExploreShowActivity : VMBaseActivity(), - ExploreShowAdapter.CallBack { + ExploreShowAdapter.CallBack, + GroupSelectDialog.CallBack { override val binding by viewBinding(ActivityExploreShowBinding::inflate) override val viewModel by viewModels() private val adapter by lazy { ExploreShowAdapter(this, this) } private val loadMoreView by lazy { LoadMoreView(this) } + private val waitDialog by lazy { + WaitDialog(this) + } override fun onActivityCreated(savedInstanceState: Bundle?) { binding.titleBar.title = intent.getStringExtra("exploreName") @@ -98,4 +116,73 @@ class ExploreShowActivity : VMBaseActivity addAllToBookshelf() + } + return super.onCompatOptionsItemSelected(item) + } + + private fun addAllToBookshelf() { + showDialogFragment(GroupSelectDialog(0)) + } + + override fun upGroup(requestCode: Int, groupId: Long) { + + alert("选择页数范围") { + val alertBinding = DialogPageChoiceBinding.inflate(layoutInflater).apply { + root.setBackgroundColor(root.context.backgroundColor) + } + customView { alertBinding.root } + yesButton { + alertBinding.run { + val start = editStart.text!!.toString().toInt() + val end = editEnd.text!!.toString().toInt() + addAllToBookshelf(start, end, groupId) + } + } + noButton() + } + + } + + private fun addAllToBookshelf(start: Int, end: Int, groupId: Long) { + val job = Coroutine.async { + launch(Main) { + waitDialog.setText("加载列表中...") + waitDialog.show() + } + val searchBooks = viewModel.loadExploreBooks(start, end) + val books = searchBooks.map { + it.toBook() + } + launch(Main) { + waitDialog.setText("添加书架中...") + } + books.forEach { + if (isInBookshelf(it.name, it.author)) return@forEach + if (it.tocUrl.isEmpty()) { + val source = appDb.bookSourceDao.getBookSource(it.origin)!! + WebBook.getBookInfoAwait(source, it) + } + it.order = appDb.bookDao.minOrder - 1 + it.group = groupId + it.save() + } + }.onError { + AppLog.put("添加书架出错\n${it.localizedMessage}", it) + }.onFinally { + waitDialog.dismiss() + } + waitDialog.setOnCancelListener { + job.cancel() + } + } + } diff --git a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt index 185557136..2581b3cb1 100644 --- a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt @@ -69,4 +69,22 @@ class ExploreShowViewModel(application: Application) : BaseViewModel(application } } + suspend fun loadExploreBooks(start: Int, end: Int): List { + val source = bookSource + val url = exploreUrl + if (source == null || url == null) return emptyList() + val searchBooks = arrayListOf() + val range = if (start <= end) { + start .. end + } else { + start downTo end + } + for (page in range) { + val books = WebBook.exploreBookAwait(source, url, page) + if (books.isEmpty()) break + searchBooks.addAll(books) + } + return searchBooks + } + } diff --git a/app/src/main/res/layout/dialog_page_choice.xml b/app/src/main/res/layout/dialog_page_choice.xml new file mode 100644 index 000000000..597f253b1 --- /dev/null +++ b/app/src/main/res/layout/dialog_page_choice.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/explore_show.xml b/app/src/main/res/menu/explore_show.xml new file mode 100644 index 000000000..754934b10 --- /dev/null +++ b/app/src/main/res/menu/explore_show.xml @@ -0,0 +1,8 @@ + + + + + + \ 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 8c8dc401e..f6be8e452 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -1117,4 +1117,6 @@ 测试 显示等待更新数量 退出软件 + 全部加入书架 + 页至 diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 75bc378e6..cdca05d5b 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1120,4 +1120,6 @@ 测试 显示等待更新数量 退出软件 + 全部加入书架 + 页至 diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f4c342073..0dfc2edfe 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1120,4 +1120,6 @@ 测试 显示等待更新数量 退出软件 + 全部加入书架 + 页至 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index ea6f541e3..0a89e309e 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -1117,4 +1117,6 @@ 测试 显示等待更新数量 退出软件 + 全部加入书架 + 页至 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index f5fd7bae1..aa1381da1 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1119,4 +1119,6 @@ 测试 显示等待更新数量 退出软件 + 全部加入书架 + 页至 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index ce3a361a6..00fd59ddf 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1119,4 +1119,6 @@ 测试 显示等待更新数量 退出软件 + 全部加入书架 + 页至 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bcda3cc67..ceb4df3c0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1120,4 +1120,6 @@ 测试 显示等待更新数量 退出软件 + 全部加入书架 + 页至 From ba60872e7136b1c28cbcf6dc0fd40768bdb94654 Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Sat, 24 Jun 2023 20:30:58 +0800 Subject: [PATCH 2/3] =?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/ui/book/explore/ExploreShowViewModel.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt index 2581b3cb1..1dff03c10 100644 --- a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt @@ -74,13 +74,16 @@ class ExploreShowViewModel(application: Application) : BaseViewModel(application val url = exploreUrl if (source == null || url == null) return emptyList() val searchBooks = arrayListOf() + var reverse = false val range = if (start <= end) { start .. end } else { + reverse = true start downTo end } for (page in range) { val books = WebBook.exploreBookAwait(source, url, page) + if (reverse) books.reverse() if (books.isEmpty()) break searchBooks.addAll(books) } From 3f0aaae700b4a7625764a635dcfe09b0ac12856d Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Sat, 24 Jun 2023 20:32:18 +0800 Subject: [PATCH 3/3] =?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/ui/book/explore/ExploreShowViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt index 1dff03c10..91dc71d52 100644 --- a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt @@ -83,8 +83,8 @@ class ExploreShowViewModel(application: Application) : BaseViewModel(application } for (page in range) { val books = WebBook.exploreBookAwait(source, url, page) - if (reverse) books.reverse() if (books.isEmpty()) break + if (reverse) books.reverse() searchBooks.addAll(books) } return searchBooks