kunfei 4 лет назад
Родитель
Сommit
7f103944ac

+ 6 - 3
app/src/main/java/io/legado/app/data/entities/SearchBook.kt

@@ -25,9 +25,11 @@ import kotlinx.parcelize.Parcelize
 data class SearchBook(
 data class SearchBook(
     @PrimaryKey
     @PrimaryKey
     override var bookUrl: String = "",
     override var bookUrl: String = "",
-    var origin: String = "",                     // 书源规则
+    /** 书源 */
+    var origin: String = "",
     var originName: String = "",
     var originName: String = "",
-    var type: Int = BookType.text,                          // @BookType
+    /** BookType */
+    var type: Int = BookType.text,
     override var name: String = "",
     override var name: String = "",
     override var author: String = "",
     override var author: String = "",
     override var kind: String? = null,
     override var kind: String? = null,
@@ -35,7 +37,8 @@ data class SearchBook(
     var intro: String? = null,
     var intro: String? = null,
     override var wordCount: String? = null,
     override var wordCount: String? = null,
     var latestChapterTitle: String? = null,
     var latestChapterTitle: String? = null,
-    var tocUrl: String = "",                    // 目录页Url (toc=table of Contents)
+    /** 目录页Url (toc=table of Contents) */
+    var tocUrl: String = "",
     var time: Long = System.currentTimeMillis(),
     var time: Long = System.currentTimeMillis(),
     override var variable: String? = null,
     override var variable: String? = null,
     var originOrder: Int = 0
     var originOrder: Int = 0

+ 6 - 3
app/src/main/java/io/legado/app/data/entities/SearchKeyword.kt

@@ -10,8 +10,11 @@ import kotlinx.parcelize.Parcelize
 @Parcelize
 @Parcelize
 @Entity(tableName = "search_keywords", indices = [(Index(value = ["word"], unique = true))])
 @Entity(tableName = "search_keywords", indices = [(Index(value = ["word"], unique = true))])
 data class SearchKeyword(
 data class SearchKeyword(
+    /** 搜索关键词 */
     @PrimaryKey
     @PrimaryKey
-    var word: String = "",                      // 搜索关键词
-    var usage: Int = 1,                         // 使用次数
-    var lastUseTime: Long = System.currentTimeMillis()      // 最后一次使用时间
+    var word: String = "",
+    /** 使用次数 */
+    var usage: Int = 1,
+    /** 最后一次使用时间 */
+    var lastUseTime: Long = System.currentTimeMillis()
 ) : Parcelable
 ) : Parcelable

+ 4 - 0
app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt

@@ -398,6 +398,10 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
         }
         }
     }
     }
 
 
+    override fun isInBookshelf(name: String, author: String): Boolean {
+        return viewModel.bookshelf.contains("$name-$author")
+    }
+
     /**
     /**
      * 显示书籍详情
      * 显示书籍详情
      */
      */

+ 1 - 0
app/src/main/java/io/legado/app/ui/book/search/SearchAdapter.kt

@@ -128,6 +128,7 @@ class SearchAdapter(context: Context, val callBack: CallBack) :
     }
     }
 
 
     interface CallBack {
     interface CallBack {
+        fun isInBookshelf(name: String, author: String): Boolean
         fun showBookInfo(name: String, author: String, bookUrl: String)
         fun showBookInfo(name: String, author: String, bookUrl: String)
     }
     }
 }
 }

+ 16 - 0
app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt

@@ -10,11 +10,16 @@ import io.legado.app.data.entities.SearchKeyword
 import io.legado.app.help.config.AppConfig
 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.ExperimentalCoroutinesApi
 import kotlinx.coroutines.channels.awaitClose
 import kotlinx.coroutines.channels.awaitClose
 import kotlinx.coroutines.flow.callbackFlow
 import kotlinx.coroutines.flow.callbackFlow
 import kotlinx.coroutines.flow.flowOn
 import kotlinx.coroutines.flow.flowOn
+import kotlinx.coroutines.flow.mapLatest
+import kotlinx.coroutines.launch
 
 
+@OptIn(ExperimentalCoroutinesApi::class)
 class SearchViewModel(application: Application) : BaseViewModel(application) {
 class SearchViewModel(application: Application) : BaseViewModel(application) {
+    val bookshelf = hashSetOf<String>()
     val searchScope: SearchScope = SearchScope(AppConfig.searchScope)
     val searchScope: SearchScope = SearchScope(AppConfig.searchScope)
     private val searchModel = SearchModel(viewModelScope, object : SearchModel.CallBack {
     private val searchModel = SearchModel(viewModelScope, object : SearchModel.CallBack {
 
 
@@ -55,6 +60,17 @@ class SearchViewModel(application: Application) : BaseViewModel(application) {
         }
         }
     }.flowOn(IO)
     }.flowOn(IO)
 
 
+    init {
+        viewModelScope.launch {
+            appDb.bookDao.flowAll().mapLatest { books ->
+                books.map { "${it.name}-${it.author}" }
+            }.collect {
+                bookshelf.clear()
+                bookshelf.addAll(it)
+            }
+        }
+    }
+
     /**
     /**
      * 开始搜索
      * 开始搜索
      */
      */