diff --git a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt index 60665c3b3..4120e45fa 100644 --- a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt +++ b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt @@ -262,7 +262,7 @@ object WebBook { Debug.log(bookSource.bookSourceUrl, "⇒正文规则为空,使用章节链接:${bookChapter.url}") return bookChapter.url } - if(bookChapter.isVolume && bookChapter.url.startsWith(bookChapter.title)) { + if (bookChapter.isVolume && bookChapter.url.startsWith(bookChapter.title)) { Debug.log(bookSource.bookSourceUrl, "⇒一级目录正文不解析规则") return bookChapter.tag ?: "" } @@ -322,16 +322,16 @@ object WebBook { context: CoroutineContext = Dispatchers.IO, ): Coroutine> { return Coroutine.async(scope, context) { - preciseSearchAwait(scope, bookSources, name, author) + preciseSearchAwait(scope, name, author, *bookSources.toTypedArray()) ?: throw NoStackTraceException("没有搜索到<$name>$author") } } suspend fun preciseSearchAwait( scope: CoroutineScope, - bookSources: List, name: String, - author: String + author: String, + vararg bookSources: BookSource ): Pair? { bookSources.forEach { source -> kotlin.runCatching { diff --git a/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookActivity.kt index 05c18594a..9b3930bec 100644 --- a/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookActivity.kt @@ -15,6 +15,7 @@ import io.legado.app.constant.PreferKey import io.legado.app.data.appDb 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.lib.dialogs.alert import io.legado.app.lib.theme.primaryColor @@ -41,6 +42,7 @@ class ArrangeBookActivity : VMBaseActivity, source: BookSource) { + fun changeSource(books: Array, source: BookSource): Coroutine { + return execute { + books.forEach { book -> + WebBook.preciseSearchAwait(this, book.name, book.author, source)?.let { + } + } + }.onFinally { + + } } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/arrange/SourcePickerDialog.kt b/app/src/main/java/io/legado/app/ui/book/arrange/SourcePickerDialog.kt index ffe384fbd..df39d1f46 100644 --- a/app/src/main/java/io/legado/app/ui/book/arrange/SourcePickerDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/arrange/SourcePickerDialog.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.SearchView +import androidx.core.view.setPadding import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.R import io.legado.app.base.BaseDialogFragment @@ -22,6 +23,7 @@ import io.legado.app.utils.setLayout import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.Job import kotlinx.coroutines.launch +import splitties.views.onClick class SourcePickerDialog : BaseDialogFragment(R.layout.dialog_source_picker) { @@ -83,7 +85,7 @@ class SourcePickerDialog : BaseDialogFragment(R.layout.dialog_source_picker) { override fun getViewBinding(parent: ViewGroup): ItemTextBinding { return ItemTextBinding.inflate(inflater, parent, false).apply { - root.setPadding(16.dpToPx(), 8.dpToPx(), 16.dpToPx(), 8.dpToPx()) + root.setPadding(16.dpToPx()) } } @@ -97,9 +99,22 @@ class SourcePickerDialog : BaseDialogFragment(R.layout.dialog_source_picker) { } override fun registerListener(holder: ItemViewHolder, binding: ItemTextBinding) { + binding.root.onClick { + getItemByLayoutPosition(holder.layoutPosition)?.let { + callback?.sourceOnClick(it) + } + } + } + + } + private val callback: Callback? + get() { + return (parentFragment as? Callback) ?: activity as? Callback } + interface Callback { + fun sourceOnClick(source: BookSource) } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 80c233673..e67921b61 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -244,7 +244,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { if (!AppConfig.autoChangeSource) return execute { val sources = appDb.bookSourceDao.allTextEnabled - WebBook.preciseSearchAwait(this, sources, name, author)?.let { + WebBook.preciseSearchAwait(this, name, author, *sources.toTypedArray())?.let { it.second.upInfoFromOld(ReadBook.book) changeTo(it.first, it.second) } ?: throw NoStackTraceException("自动换源失败")