pull/2514/head
kunfei 3 years ago
parent 102e7bd689
commit a4a7a63b2d
  1. 9
      app/src/main/java/io/legado/app/data/entities/SearchBook.kt
  2. 9
      app/src/main/java/io/legado/app/data/entities/SearchKeyword.kt
  3. 4
      app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt
  4. 1
      app/src/main/java/io/legado/app/ui/book/search/SearchAdapter.kt
  5. 16
      app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.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

@ -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 word: String = "",
var usage: Int = 1, // 使用次数 /** 使用次数 */
var lastUseTime: Long = System.currentTimeMillis() // 最后一次使用时间 var usage: Int = 1,
/** 最后一次使用时间 */
var lastUseTime: Long = System.currentTimeMillis()
) : Parcelable ) : Parcelable

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

@ -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)
} }
} }

@ -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)
}
}
}
/** /**
* 开始搜索 * 开始搜索
*/ */

Loading…
Cancel
Save