|
|
|
@ -4,8 +4,8 @@ import android.content.Context |
|
|
|
|
import android.view.ViewGroup |
|
|
|
|
import androidx.recyclerview.widget.DiffUtil |
|
|
|
|
import io.legado.app.R |
|
|
|
|
import io.legado.app.base.adapter.DiffRecyclerAdapter |
|
|
|
|
import io.legado.app.base.adapter.ItemViewHolder |
|
|
|
|
import io.legado.app.base.adapter.RecyclerAdapter |
|
|
|
|
import io.legado.app.data.entities.Book |
|
|
|
|
import io.legado.app.data.entities.BookChapter |
|
|
|
|
import io.legado.app.databinding.ItemChapterListBinding |
|
|
|
@ -22,21 +22,23 @@ import kotlinx.coroutines.isActive |
|
|
|
|
import java.util.concurrent.ConcurrentHashMap |
|
|
|
|
|
|
|
|
|
class ChapterListAdapter(context: Context, val callback: Callback) : |
|
|
|
|
RecyclerAdapter<BookChapter, ItemChapterListBinding>(context) { |
|
|
|
|
DiffRecyclerAdapter<BookChapter, ItemChapterListBinding>(context) { |
|
|
|
|
|
|
|
|
|
val cacheFileNames = hashSetOf<String>() |
|
|
|
|
val displayTileMap = ConcurrentHashMap<Int, String>() |
|
|
|
|
val diffCallBack = object : DiffUtil.ItemCallback<BookChapter>() { |
|
|
|
|
|
|
|
|
|
override fun areItemsTheSame( |
|
|
|
|
oldItem: BookChapter, |
|
|
|
|
newItem: BookChapter |
|
|
|
|
): Boolean { |
|
|
|
|
return oldItem.index == newItem.index |
|
|
|
|
} |
|
|
|
|
override val diffItemCallback: DiffUtil.ItemCallback<BookChapter> |
|
|
|
|
get() = object : DiffUtil.ItemCallback<BookChapter>() { |
|
|
|
|
|
|
|
|
|
override fun areItemsTheSame( |
|
|
|
|
oldItem: BookChapter, |
|
|
|
|
newItem: BookChapter |
|
|
|
|
): Boolean { |
|
|
|
|
return oldItem.index == newItem.index |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun areContentsTheSame( |
|
|
|
|
oldItem: BookChapter, |
|
|
|
|
override fun areContentsTheSame( |
|
|
|
|
oldItem: BookChapter, |
|
|
|
|
newItem: BookChapter |
|
|
|
|
): Boolean { |
|
|
|
|
return oldItem.bookUrl == newItem.bookUrl |
|
|
|
@ -48,7 +50,7 @@ class ChapterListAdapter(context: Context, val callback: Callback) : |
|
|
|
|
&& oldItem.isVolume == newItem.isVolume |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private val replaceRules |
|
|
|
|
get() = callback.book?.let { |
|
|
|
@ -58,6 +60,11 @@ class ChapterListAdapter(context: Context, val callback: Callback) : |
|
|
|
|
get() = AppConfig.tocUiUseReplace && callback.book?.getUseReplaceRule() == true |
|
|
|
|
private var upDisplayTileJob: Coroutine<*>? = null |
|
|
|
|
|
|
|
|
|
override fun onCurrentListChanged() { |
|
|
|
|
super.onCurrentListChanged() |
|
|
|
|
upDisplayTile() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fun upDisplayTile() { |
|
|
|
|
upDisplayTileJob?.cancel() |
|
|
|
|
upDisplayTileJob = Coroutine.async(callback.scope) { |
|
|
|
@ -151,4 +158,5 @@ class ChapterListAdapter(context: Context, val callback: Callback) : |
|
|
|
|
fun openChapter(bookChapter: BookChapter) |
|
|
|
|
fun durChapterIndex(): Int |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |