This commit is contained in:
Horis
2023-09-11 16:16:55 +08:00
parent 1d23acf6b4
commit 9b45ce05e2
3 changed files with 21 additions and 6 deletions
@@ -91,7 +91,6 @@ class SearchModel(private val scope: CoroutineScope, private val callBack: CallB
onSuccess(searchId, it) onSuccess(searchId, it)
} }
.onFinally { .onFinally {
ensureActive()
onFinally(searchId) onFinally(searchId)
} }
tasks.add(task) tasks.add(task)
@@ -13,6 +13,8 @@ import io.legado.app.databinding.ActivityAllBookmarkBinding
import io.legado.app.ui.file.HandleFileContract import io.legado.app.ui.file.HandleFileContract
import io.legado.app.utils.showDialogFragment import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class AllBookmarkActivity : VMBaseActivity<ActivityAllBookmarkBinding, AllBookmarkViewModel>(), class AllBookmarkActivity : VMBaseActivity<ActivityAllBookmarkBinding, AllBookmarkViewModel>(),
@@ -35,7 +37,7 @@ class AllBookmarkActivity : VMBaseActivity<ActivityAllBookmarkBinding, AllBookma
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
initView() initView()
lifecycleScope.launch { lifecycleScope.launch {
appDb.bookmarkDao.flowAll().collect { appDb.bookmarkDao.flowAll().flowOn(IO).collect {
adapter.setItems(it) adapter.setItems(it)
} }
} }
@@ -28,6 +28,7 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application
private var searchPool: ExecutorCoroutineDispatcher? = null private var searchPool: ExecutorCoroutineDispatcher? = null
private val tasks = CompositeCoroutine() private val tasks = CompositeCoroutine()
private var searchSuccess: ((SearchBook) -> Unit)? = null private var searchSuccess: ((SearchBook) -> Unit)? = null
private var upAdapter: (() -> Unit)? = null
private var bookSourceList = arrayListOf<BookSource>() private var bookSourceList = arrayListOf<BookSource>()
private val defaultCover by lazy { private val defaultCover by lazy {
listOf( listOf(
@@ -42,8 +43,8 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application
val searchStateData = MutableLiveData<Boolean>() val searchStateData = MutableLiveData<Boolean>()
var name: String = "" var name: String = ""
var author: String = "" var author: String = ""
val dataFlow = callbackFlow<List<SearchBook>> { val searchBooks: MutableList<SearchBook> = Collections.synchronizedList(arrayListOf())
val searchBooks = Collections.synchronizedList(arrayListOf<SearchBook>()) val dataFlow = callbackFlow {
searchSuccess = { searchBook -> searchSuccess = { searchBook ->
if (!searchBooks.contains(searchBook)) { if (!searchBooks.contains(searchBook)) {
@@ -52,6 +53,10 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application
} }
} }
upAdapter = {
trySend(defaultCover + searchBooks.sortedBy { it.originOrder })
}
appDb.searchBookDao.getEnableHasCover(name, author).let { appDb.searchBookDao.getEnableHasCover(name, author).let {
searchBooks.addAll(it) searchBooks.addAll(it)
trySend(defaultCover + searchBooks.toList()) trySend(defaultCover + searchBooks.toList())
@@ -64,6 +69,7 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application
awaitClose { awaitClose {
searchBooks.clear() searchBooks.clear()
searchSuccess = null searchSuccess = null
upAdapter = null
} }
}.flowOn(IO) }.flowOn(IO)
@@ -90,6 +96,8 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application
private fun startSearch() { private fun startSearch() {
execute { execute {
stopSearch() stopSearch()
searchBooks.clear()
upAdapter?.invoke()
bookSourceList.clear() bookSourceList.clear()
bookSourceList.addAll(appDb.bookSourceDao.allEnabled) bookSourceList.addAll(appDb.bookSourceDao.allEnabled)
searchStateData.postValue(true) searchStateData.postValue(true)
@@ -112,7 +120,13 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application
return return
} }
val task = WebBook val task = WebBook
.searchBook(viewModelScope, source, name, context = searchPool!!) .searchBook(
viewModelScope,
source,
name,
context = searchPool!!,
executeContext = searchPool!!
)
.timeout(60000L) .timeout(60000L)
.onSuccess(IO) { .onSuccess(IO) {
it.firstOrNull()?.let { searchBook -> it.firstOrNull()?.let { searchBook ->
@@ -124,7 +138,7 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application
} }
} }
} }
.onFinally(searchPool) { .onFinally {
searchNext() searchNext()
} }
tasks.add(task) tasks.add(task)