kunfei 4 lat temu
rodzic
commit
e6cd3d9a88

+ 14 - 9
app/src/main/java/io/legado/app/ui/book/toc/ChapterListAdapter.kt

@@ -13,23 +13,26 @@ import io.legado.app.lib.theme.accentColor
 import io.legado.app.utils.getCompatColor
 import io.legado.app.utils.getCompatColor
 import io.legado.app.utils.gone
 import io.legado.app.utils.gone
 import io.legado.app.utils.visible
 import io.legado.app.utils.visible
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.launch
 
 
-class ChapterListAdapter(context: Context, val callback: Callback) :
-    RecyclerAdapter<Pair<BookChapter, String>, ItemChapterListBinding>(context) {
+class ChapterListAdapter(context: Context, val callback: Callback, private val scope: CoroutineScope) :
+    RecyclerAdapter<Pair<BookChapter, Deferred<String>>, ItemChapterListBinding>(context) {
 
 
     val cacheFileNames = hashSetOf<String>()
     val cacheFileNames = hashSetOf<String>()
-    val diffCallBack = object : DiffUtil.ItemCallback<Pair<BookChapter, String>>() {
+    val diffCallBack = object : DiffUtil.ItemCallback<Pair<BookChapter, Deferred<String>>>() {
 
 
         override fun areItemsTheSame(
         override fun areItemsTheSame(
-            oldItem: Pair<BookChapter, String>,
-            newItem: Pair<BookChapter, String>
+            oldItem: Pair<BookChapter, Deferred<String>>,
+            newItem: Pair<BookChapter, Deferred<String>>
         ): Boolean {
         ): Boolean {
             return oldItem.first.index == newItem.first.index
             return oldItem.first.index == newItem.first.index
         }
         }
 
 
         override fun areContentsTheSame(
         override fun areContentsTheSame(
-            oldItem: Pair<BookChapter, String>,
-            newItem: Pair<BookChapter, String>
+            oldItem: Pair<BookChapter, Deferred<String>>,
+            newItem: Pair<BookChapter, Deferred<String>>
         ): Boolean {
         ): Boolean {
             return oldItem.first.bookUrl == newItem.first.bookUrl
             return oldItem.first.bookUrl == newItem.first.bookUrl
                 && oldItem.first.url == newItem.first.url
                 && oldItem.first.url == newItem.first.url
@@ -49,7 +52,7 @@ class ChapterListAdapter(context: Context, val callback: Callback) :
     override fun convert(
     override fun convert(
         holder: ItemViewHolder,
         holder: ItemViewHolder,
         binding: ItemChapterListBinding,
         binding: ItemChapterListBinding,
-        item: Pair<BookChapter, String>,
+        item: Pair<BookChapter, Deferred<String>>,
         payloads: MutableList<Any>
         payloads: MutableList<Any>
     ) {
     ) {
         binding.run {
         binding.run {
@@ -61,7 +64,9 @@ class ChapterListAdapter(context: Context, val callback: Callback) :
                 } else {
                 } else {
                     tvChapterName.setTextColor(context.getCompatColor(R.color.primaryText))
                     tvChapterName.setTextColor(context.getCompatColor(R.color.primaryText))
                 }
                 }
-                tvChapterName.text = item.second
+                scope.launch {
+                    tvChapterName.text = item.second.await()
+                }
                 if (item.first.isVolume) {
                 if (item.first.isVolume) {
                     //卷名,如第一卷 突出显示
                     //卷名,如第一卷 突出显示
                     tvChapterItem.setBackgroundColor(context.getCompatColor(R.color.btn_bg_press))
                     tvChapterItem.setBackgroundColor(context.getCompatColor(R.color.btn_bg_press))

+ 3 - 2
app/src/main/java/io/legado/app/ui/book/toc/ChapterListFragment.kt

@@ -25,6 +25,7 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
 import kotlinx.coroutines.Dispatchers.IO
 import kotlinx.coroutines.Dispatchers.IO
 import kotlinx.coroutines.Dispatchers.Main
 import kotlinx.coroutines.Dispatchers.Main
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.Job
+import kotlinx.coroutines.async
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 import kotlinx.coroutines.withContext
 
 
@@ -34,7 +35,7 @@ class ChapterListFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_chapt
     override val viewModel by activityViewModels<TocViewModel>()
     override val viewModel by activityViewModels<TocViewModel>()
     private val binding by viewBinding(FragmentChapterListBinding::bind)
     private val binding by viewBinding(FragmentChapterListBinding::bind)
     private val mLayoutManager by lazy { UpLinearLayoutManager(requireContext()) }
     private val mLayoutManager by lazy { UpLinearLayoutManager(requireContext()) }
-    private val adapter by lazy { ChapterListAdapter(requireContext(), this) }
+    private val adapter by lazy { ChapterListAdapter(requireContext(), this, this) }
     private var durChapterIndex = 0
     private var durChapterIndex = 0
     private var tocFlowJob: Job? = null
     private var tocFlowJob: Job? = null
 
 
@@ -118,7 +119,7 @@ class ChapterListFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_chapt
                         }
                         }
                         val useReplace = viewModel.bookData.value?.getUseReplaceRule() == true
                         val useReplace = viewModel.bookData.value?.getUseReplaceRule() == true
                         it.map { chapter ->
                         it.map { chapter ->
-                            Pair(chapter, chapter.getDisplayTitle(replaces, useReplace))
+                            Pair(chapter, async { chapter.getDisplayTitle(replaces, useReplace) })
                         }
                         }
                     }
                     }
                     adapter.setItems(data, adapter.diffCallBack)
                     adapter.setItems(data, adapter.diffCallBack)