优化
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user