diff --git a/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt index bc5de6649..2510e280f 100644 --- a/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt @@ -4,6 +4,7 @@ import android.app.Application import android.os.Bundle import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope +import cn.hutool.core.collection.ConcurrentHashSet import io.legado.app.base.BaseViewModel import io.legado.app.constant.AppConst import io.legado.app.constant.AppPattern @@ -33,7 +34,7 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application var name: String = "" var author: String = "" val dataFlow = callbackFlow> { - val searchBooks = arrayListOf() + val searchBooks = ConcurrentHashSet() searchSuccess = { if (!searchBooks.contains(it)) { @@ -44,7 +45,7 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application appDb.searchBookDao.getEnableHasCover(name, author).let { searchBooks.addAll(it) - trySend(searchBooks) + trySend(ArrayList(searchBooks)) } if (searchBooks.size <= 1) { diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceViewModel.kt index 459cc972c..1448bdd4b 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceViewModel.kt @@ -4,6 +4,7 @@ import android.app.Application import android.os.Bundle import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope +import cn.hutool.core.collection.ConcurrentHashSet import io.legado.app.base.BaseViewModel import io.legado.app.constant.AppConst import io.legado.app.constant.AppPattern @@ -27,7 +28,6 @@ import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map import splitties.init.appCtx import timber.log.Timber -import java.util.concurrent.CopyOnWriteArrayList import java.util.concurrent.Executors import kotlin.math.min @@ -41,7 +41,7 @@ class ChangeSourceViewModel(application: Application) : BaseViewModel(applicatio private var tasks = CompositeCoroutine() private var screenKey: String = "" private var bookSourceList = arrayListOf() - private val searchBooks = CopyOnWriteArrayList() + private val searchBooks = ConcurrentHashSet() private val searchGroup get() = appCtx.getPrefString("searchGroup") ?: "" private var searchCallback: SourceCallback? = null val searchDataFlow = callbackFlow { @@ -50,9 +50,7 @@ class ChangeSourceViewModel(application: Application) : BaseViewModel(applicatio override fun searchSuccess(searchBook: SearchBook) { appDb.searchBookDao.insert(searchBook) - val index = searchBooks.indexOf(searchBook) when { - index >= 0 -> searchBooks[index] = searchBook screenKey.isEmpty() -> searchBooks.add(searchBook) searchBook.name.contains(screenKey) -> searchBooks.add(searchBook) else -> return