搜索添加搜索范围可选择单个书源和分组,未完成

pull/2424/head
kunfei 3 years ago
parent c056b5d3f1
commit 3aa346c764
  1. 6
      app/src/main/java/io/legado/app/help/config/AppConfig.kt
  2. 12
      app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt
  3. 47
      app/src/main/java/io/legado/app/ui/book/search/SearchScope.kt
  4. 3
      app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt

@ -342,6 +342,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
val progressBarBehavior: String? val progressBarBehavior: String?
get() = appCtx.getPrefString(PreferKey.progressBarBehavior, "page") get() = appCtx.getPrefString(PreferKey.progressBarBehavior, "page")
var searchScope: String
get() = appCtx.getPrefString("searchScope") ?: ""
set(value) {
appCtx.putPrefString("searchScope", value)
}
var searchGroup: String var searchGroup: String
get() = appCtx.getPrefString("searchGroup") ?: "" get() = appCtx.getPrefString("searchGroup") ?: ""
set(value) { set(value) {

@ -21,7 +21,6 @@ import io.legado.app.data.appDb
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.data.entities.SearchKeyword import io.legado.app.data.entities.SearchKeyword
import io.legado.app.databinding.ActivityBookSearchBinding import io.legado.app.databinding.ActivityBookSearchBinding
import io.legado.app.help.IntentData
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.* import io.legado.app.lib.theme.*
@ -260,11 +259,10 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
} }
private fun receiptIntent(intent: Intent? = null) { private fun receiptIntent(intent: Intent? = null) {
val searchScopeKey = intent?.getStringExtra("searchScopeKey") val searchScope = intent?.getStringExtra("searchScope")
searchScopeKey?.let { searchScope?.let {
IntentData.get<SearchScope>(searchScopeKey)?.let { searchScope -> viewModel.searchScope.scope = searchScope
viewModel.searchScope = searchScope searchScopeAdapter.setItems(viewModel.searchScope.getShowNames())
}
} }
val key = intent?.getStringExtra("key") val key = intent?.getStringExtra("key")
if (key.isNullOrBlank()) { if (key.isNullOrBlank()) {
@ -296,6 +294,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
if (visible) { if (visible) {
upHistory(searchView.query.toString()) upHistory(searchView.query.toString())
binding.llInputHelp.visibility = VISIBLE binding.llInputHelp.visibility = VISIBLE
searchScopeAdapter.setItems(viewModel.searchScope.getShowNames())
} else { } else {
binding.llInputHelp.visibility = GONE binding.llInputHelp.visibility = GONE
} }
@ -426,6 +425,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
override fun onSearchScopeOk(searchScope: SearchScope) { override fun onSearchScopeOk(searchScope: SearchScope) {
viewModel.searchScope = searchScope viewModel.searchScope = searchScope
searchScopeAdapter.setItems(searchScope.getShowNames())
} }
private fun alertSearchScope() { private fun alertSearchScope() {

@ -2,25 +2,34 @@ package io.legado.app.ui.book.search
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.data.entities.BookSource import io.legado.app.data.entities.BookSource
import io.legado.app.help.config.AppConfig
import io.legado.app.utils.splitNotBlank
/** /**
* 搜索范围 * 搜索范围
*/ */
data class SearchScope( @Suppress("unused")
private val groups: List<String>? = null, data class SearchScope(var scope: String) {
private val sources: List<BookSource>? = null
) { constructor(groups: List<String>) : this(groups.joinToString(","))
constructor(source: BookSource) : this("${source.bookSourceName}::${source.bookSourceUrl}")
override fun toString(): String {
return scope
}
/** /**
* 搜索范围显示 * 搜索范围显示
*/ */
fun getShowNames(): List<String> { fun getShowNames(): List<String> {
val list = arrayListOf<String>() val list = arrayListOf<String>()
groups?.let { if (scope.contains("::")) {
list.addAll(it) list.add(scope.substringBefore("::"))
} } else {
sources?.forEach { scope.splitNotBlank(",").forEach {
list.add(it.bookSourceName) list.add(it)
}
} }
if (list.isEmpty()) { if (list.isEmpty()) {
list.add("全部书源") list.add("全部书源")
@ -33,18 +42,26 @@ data class SearchScope(
*/ */
fun getBookSources(): List<BookSource> { fun getBookSources(): List<BookSource> {
val list = hashSetOf<BookSource>() val list = hashSetOf<BookSource>()
sources?.let { if (scope.contains("::")) {
list.addAll(sources) scope.substringAfter("::").let {
} appDb.bookSourceDao.getBookSource(it)?.let { source ->
groups?.forEach { group -> list.add(source)
appDb.bookSourceDao.getEnabledByGroup(group).let { }
list.addAll(it) }
} else {
scope.splitNotBlank(",").forEach {
list.addAll(appDb.bookSourceDao.getByGroup(it))
} }
} }
if (list.isEmpty()) { if (list.isEmpty()) {
scope = ""
return appDb.bookSourceDao.allEnabled return appDb.bookSourceDao.allEnabled
} }
return list.sortedBy { it.customOrder } return list.sortedBy { it.customOrder }
} }
fun save() {
AppConfig.searchScope = scope
}
} }

@ -7,6 +7,7 @@ import io.legado.app.base.BaseViewModel
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.data.entities.SearchBook import io.legado.app.data.entities.SearchBook
import io.legado.app.data.entities.SearchKeyword import io.legado.app.data.entities.SearchKeyword
import io.legado.app.help.config.AppConfig
import io.legado.app.model.webBook.SearchModel import io.legado.app.model.webBook.SearchModel
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.channels.awaitClose
@ -34,7 +35,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) {
}) })
var searchFinishCallback: ((isEmpty: Boolean) -> Unit)? = null var searchFinishCallback: ((isEmpty: Boolean) -> Unit)? = null
var isSearchLiveData = MutableLiveData<Boolean>() var isSearchLiveData = MutableLiveData<Boolean>()
var searchScope: SearchScope = SearchScope() var searchScope: SearchScope = SearchScope(AppConfig.searchScope)
var searchKey: String = "" var searchKey: String = ""
private var searchID = 0L private var searchID = 0L
private var searchFlowCallBack: ((searchBooks: ArrayList<SearchBook>) -> Unit)? = null private var searchFlowCallBack: ((searchBooks: ArrayList<SearchBook>) -> Unit)? = null

Loading…
Cancel
Save