kunfei 4 年 前
親
コミット
8f3ca4ad7f

+ 3 - 12
app/src/main/java/io/legado/app/model/webBook/SearchModel.kt

@@ -7,6 +7,7 @@ import io.legado.app.data.entities.BookSource
 import io.legado.app.data.entities.SearchBook
 import io.legado.app.help.config.AppConfig
 import io.legado.app.help.coroutine.CompositeCoroutine
+import io.legado.app.ui.book.search.SearchScope
 import io.legado.app.utils.getPrefBoolean
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.ExecutorCoroutineDispatcher
@@ -50,21 +51,10 @@ class SearchModel(private val scope: CoroutineScope, private val callBack: CallB
             initSearchPool()
             mSearchId = searchId
             searchPage = 1
-            val searchGroup = AppConfig.searchGroup
             bookSourceList.clear()
             searchBooks.clear()
             callBack.onSearchSuccess(searchBooks)
-            if (searchGroup.isBlank()) {
-                bookSourceList.addAll(appDb.bookSourceDao.allEnabled)
-            } else {
-                val sources = appDb.bookSourceDao.getEnabledByGroup(searchGroup)
-                if (sources.isEmpty()) {
-                    AppConfig.searchGroup = ""
-                    bookSourceList.addAll(appDb.bookSourceDao.allEnabled)
-                } else {
-                    bookSourceList.addAll(sources)
-                }
-            }
+            bookSourceList.addAll(callBack.getSearchScope().getBookSources())
         } else {
             searchPage++
         }
@@ -203,6 +193,7 @@ class SearchModel(private val scope: CoroutineScope, private val callBack: CallB
     }
 
     interface CallBack {
+        fun getSearchScope(): SearchScope
         fun onSearchStart()
         fun onSearchSuccess(searchBooks: ArrayList<SearchBook>)
         fun onSearchFinish(isEmpty: Boolean)

+ 3 - 37
app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt

@@ -64,9 +64,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
     }
     private var historyFlowJob: Job? = null
     private var booksFlowJob: Job? = null
-    private var menu: Menu? = null
     private var precisionSearchMenuItem: MenuItem? = null
-    private var groups = linkedSetOf<String>()
     private var isManualStopSearch = false
     private val searchFinishCallback: (isEmpty: Boolean) -> Unit = searchFinish@{ isEmpty ->
         val searchGroup = AppConfig.searchGroup
@@ -114,8 +112,6 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
         menuInflater.inflate(R.menu.book_search, menu)
         precisionSearchMenuItem = menu.findItem(R.id.menu_precision_search)
         precisionSearchMenuItem?.isChecked = getPrefBoolean(PreferKey.precisionSearch)
-        this.menu = menu
-        upGroupMenu()
         return super.onCompatCreateOptionsMenu(menu)
     }
 
@@ -249,19 +245,12 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
                 delay(1000)
             }
         }
-        launch {
-            appDb.bookSourceDao.flowEnabledGroups().conflate().collect {
-                groups.clear()
-                groups.addAll(it)
-                upGroupMenu()
-            }
-        }
     }
 
     private fun receiptIntent(intent: Intent? = null) {
         val searchScope = intent?.getStringExtra("searchScope")
         searchScope?.let {
-            viewModel.searchScope.scope = searchScope
+            viewModel.searchScope.update(searchScope)
             searchScopeAdapter.setItems(viewModel.searchScope.getShowNames())
         }
         val key = intent?.getStringExtra("key")
@@ -300,30 +289,6 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
         }
     }
 
-    /**
-     * 更新分组菜单
-     */
-    private fun upGroupMenu() = menu?.let { menu ->
-        val selectedGroup = AppConfig.searchGroup
-        menu.removeGroup(R.id.source_group)
-        val allItem = menu.add(R.id.source_group, Menu.NONE, Menu.NONE, R.string.all_source)
-        var hasSelectedGroup = false
-        groups.sortedWith { o1, o2 ->
-            o1.cnCompare(o2)
-        }.forEach { group ->
-            menu.add(R.id.source_group, Menu.NONE, Menu.NONE, group)?.let {
-                if (group == selectedGroup) {
-                    it.isChecked = true
-                    hasSelectedGroup = true
-                }
-            }
-        }
-        menu.setGroupCheckable(R.id.source_group, true, true)
-        if (!hasSelectedGroup) {
-            allItem.isChecked = true
-        }
-    }
-
     /**
      * 更新搜索历史
      */
@@ -424,7 +389,8 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
 
 
     override fun onSearchScopeOk(searchScope: SearchScope) {
-        viewModel.searchScope = searchScope
+        searchScope.save()
+        viewModel.searchScope.update(searchScope.toString())
         searchScopeAdapter.setItems(searchScope.getShowNames())
     }
 

+ 13 - 1
app/src/main/java/io/legado/app/ui/book/search/SearchScope.kt

@@ -9,7 +9,7 @@ import io.legado.app.utils.splitNotBlank
  * 搜索范围
  */
 @Suppress("unused")
-data class SearchScope(var scope: String) {
+data class SearchScope(private var scope: String) {
 
     constructor(groups: List<String>) : this(groups.joinToString(","))
 
@@ -19,6 +19,18 @@ data class SearchScope(var scope: String) {
         return scope
     }
 
+    fun update(scope: String) {
+        this.scope = scope
+    }
+
+    fun update(groups: List<String>) {
+        scope = groups.joinToString(",")
+    }
+
+    fun update(source: BookSource) {
+        scope = "${source.bookSourceName}::${source.bookSourceUrl}"
+    }
+
     /**
      * 搜索范围显示
      */

+ 6 - 1
app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt

@@ -15,7 +15,13 @@ import kotlinx.coroutines.flow.callbackFlow
 import kotlinx.coroutines.flow.flowOn
 
 class SearchViewModel(application: Application) : BaseViewModel(application) {
+    val searchScope: SearchScope = SearchScope(AppConfig.searchScope)
     private val searchModel = SearchModel(viewModelScope, object : SearchModel.CallBack {
+
+        override fun getSearchScope(): SearchScope {
+            return searchScope
+        }
+
         override fun onSearchStart() {
             isSearchLiveData.postValue(true)
         }
@@ -35,7 +41,6 @@ class SearchViewModel(application: Application) : BaseViewModel(application) {
     })
     var searchFinishCallback: ((isEmpty: Boolean) -> Unit)? = null
     var isSearchLiveData = MutableLiveData<Boolean>()
-    var searchScope: SearchScope = SearchScope(AppConfig.searchScope)
     var searchKey: String = ""
     private var searchID = 0L
     private var searchFlowCallBack: ((searchBooks: ArrayList<SearchBook>) -> Unit)? = null

+ 9 - 4
app/src/main/res/menu/book_search.xml

@@ -1,7 +1,13 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
-    tools:context=".view.activity.MainActivity">
+    tools:ignore="AlwaysShowAction">
+
+    <item
+        android:id="@+id/menu_precision_search"
+        android:checkable="true"
+        android:title="@string/precision_search"
+        app:showAsAction="never" />
 
     <item
         android:id="@+id/menu_source_manage"
@@ -9,9 +15,8 @@
         app:showAsAction="never" />
 
     <item
-        android:id="@+id/menu_precision_search"
-        android:title="@string/precision_search"
-        android:checkable="true"
+        android:id="@+id/menu_log"
+        android:title="@string/log"
         app:showAsAction="never" />
 
 </menu>