mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
优化
This commit is contained in:
@@ -74,45 +74,39 @@ abstract class DiffRecyclerAdapter<ITEM, VB : ViewBinding>(protected val context
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun updateItem(item: ITEM) {
|
||||
withContext(Dispatchers.Main) {
|
||||
synchronized(asyncListDiffer) {
|
||||
kotlin.runCatching {
|
||||
val index = asyncListDiffer.currentList.indexOf(item)
|
||||
if (index >= 0) {
|
||||
asyncListDiffer.currentList[index] = item
|
||||
notifyItemChanged(index)
|
||||
}
|
||||
fun updateItem(item: ITEM) {
|
||||
synchronized(asyncListDiffer) {
|
||||
kotlin.runCatching {
|
||||
val index = asyncListDiffer.currentList.indexOf(item)
|
||||
if (index >= 0) {
|
||||
asyncListDiffer.currentList[index] = item
|
||||
notifyItemChanged(index)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun updateItem(position: Int, payload: Any) {
|
||||
withContext(Dispatchers.Main) {
|
||||
synchronized(asyncListDiffer) {
|
||||
kotlin.runCatching {
|
||||
val size = itemCount
|
||||
if (position in 0 until size) {
|
||||
notifyItemChanged(position, payload)
|
||||
}
|
||||
fun updateItem(position: Int, payload: Any) {
|
||||
synchronized(asyncListDiffer) {
|
||||
kotlin.runCatching {
|
||||
val size = itemCount
|
||||
if (position in 0 until size) {
|
||||
notifyItemChanged(position, payload)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun updateItems(fromPosition: Int, toPosition: Int, payloads: Any) {
|
||||
withContext(Dispatchers.Main) {
|
||||
synchronized(asyncListDiffer) {
|
||||
kotlin.runCatching {
|
||||
val size = itemCount
|
||||
if (fromPosition in 0 until size && toPosition in 0 until size) {
|
||||
notifyItemRangeChanged(
|
||||
fromPosition,
|
||||
toPosition - fromPosition + 1,
|
||||
payloads
|
||||
)
|
||||
}
|
||||
fun updateItems(fromPosition: Int, toPosition: Int, payloads: Any) {
|
||||
synchronized(asyncListDiffer) {
|
||||
kotlin.runCatching {
|
||||
val size = itemCount
|
||||
if (fromPosition in 0 until size && toPosition in 0 until size) {
|
||||
notifyItemRangeChanged(
|
||||
fromPosition,
|
||||
toPosition - fromPosition + 1,
|
||||
payloads
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ import io.legado.app.lib.theme.primaryColor
|
||||
import io.legado.app.utils.applyTint
|
||||
import io.legado.app.utils.setLayout
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.conflate
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -68,7 +67,7 @@ class ChangeCoverDialog() : BaseDialogFragment(R.layout.dialog_change_cover),
|
||||
}
|
||||
|
||||
private fun initData() {
|
||||
launch(Dispatchers.Default) {
|
||||
launch {
|
||||
whenStarted {
|
||||
viewModel.dataFlow.conflate().collect {
|
||||
adapter.setItems(it)
|
||||
|
||||
@@ -29,7 +29,6 @@ import io.legado.app.ui.book.source.manage.BookSourceActivity
|
||||
import io.legado.app.ui.widget.recycler.VerticalDivider
|
||||
import io.legado.app.utils.*
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.conflate
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -146,7 +145,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
|
||||
}
|
||||
binding.toolBar.menu.applyTint(requireContext())
|
||||
}
|
||||
launch(Dispatchers.Default) {
|
||||
launch {
|
||||
whenStarted {
|
||||
viewModel.searchDataFlow.conflate().collect {
|
||||
adapter.setItems(it)
|
||||
|
||||
@@ -31,7 +31,6 @@ import io.legado.app.ui.book.source.manage.BookSourceActivity
|
||||
import io.legado.app.ui.widget.recycler.VerticalDivider
|
||||
import io.legado.app.utils.*
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.conflate
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -178,7 +177,7 @@ class ChangeChapterSourceDialog() : BaseDialogFragment(R.layout.dialog_chapter_c
|
||||
}
|
||||
binding.toolBar.menu.applyTint(requireContext())
|
||||
}
|
||||
launch(Dispatchers.Default) {
|
||||
launch {
|
||||
whenStarted {
|
||||
viewModel.searchDataFlow.conflate().collect {
|
||||
searchBookAdapter.setItems(it)
|
||||
|
||||
@@ -29,7 +29,6 @@ import io.legado.app.ui.book.source.manage.BookSourceActivity
|
||||
import io.legado.app.ui.widget.recycler.LoadMoreView
|
||||
import io.legado.app.utils.*
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
import kotlinx.coroutines.Dispatchers.Default
|
||||
import kotlinx.coroutines.Dispatchers.IO
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.delay
|
||||
@@ -199,7 +198,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
|
||||
}
|
||||
|
||||
private fun initData() {
|
||||
lifecycleScope.launch(Default) {
|
||||
lifecycleScope.launch {
|
||||
whenStarted {
|
||||
viewModel.searchDataFlow.conflate().collect {
|
||||
adapter.setItems(it)
|
||||
|
||||
@@ -28,6 +28,7 @@ import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.catch
|
||||
import kotlinx.coroutines.flow.conflate
|
||||
import kotlinx.coroutines.flow.flowOn
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlin.math.max
|
||||
@@ -104,7 +105,7 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
|
||||
|
||||
private fun upRecyclerData() {
|
||||
booksFlowJob?.cancel()
|
||||
booksFlowJob = launch(Dispatchers.Default) {
|
||||
booksFlowJob = launch {
|
||||
when (groupId) {
|
||||
AppConst.bookGroupAllId -> appDb.bookDao.flowAll()
|
||||
AppConst.bookGroupLocalId -> appDb.bookDao.flowLocal()
|
||||
@@ -120,7 +121,7 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
|
||||
3 -> list.sortedBy { it.order }
|
||||
else -> list.sortedByDescending { it.durChapterTime }
|
||||
}
|
||||
}.catch {
|
||||
}.flowOn(Dispatchers.Default).catch {
|
||||
AppLog.put("书架更新出错", it)
|
||||
}.conflate().collect { list ->
|
||||
binding.tvEmptyMsg.isGone = list.isNotEmpty()
|
||||
|
||||
Reference in New Issue
Block a user