Fix crashes

master
Koitharu 1 year ago
parent 6a0ad7f79b
commit d1d7cc9adf
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -13,6 +13,7 @@ class ExpiringLruCache<T>(
private val cache = SieveCache<CacheKey, ExpiringValue<T>>(maxSize) private val cache = SieveCache<CacheKey, ExpiringValue<T>>(maxSize)
@Synchronized
operator fun get(key: CacheKey): T? { operator fun get(key: CacheKey): T? {
val value = cache[key] ?: return null val value = cache[key] ?: return null
if (value.isExpired) { if (value.isExpired) {
@ -22,21 +23,28 @@ class ExpiringLruCache<T>(
} }
operator fun set(key: CacheKey, value: T) { operator fun set(key: CacheKey, value: T) {
cache.put(key, ExpiringValue(value, lifetime, timeUnit)) val value = ExpiringValue(value, lifetime, timeUnit)
synchronized(this) {
cache.put(key, value)
}
} }
@Synchronized
fun clear() { fun clear() {
cache.evictAll() cache.evictAll()
} }
@Synchronized
fun trimToSize(size: Int) { fun trimToSize(size: Int) {
cache.trimToSize(size) cache.trimToSize(size)
} }
@Synchronized
fun remove(key: CacheKey) { fun remove(key: CacheKey) {
cache.remove(key) cache.remove(key)
} }
@Synchronized
fun removeAll(source: MangaSource) { fun removeAll(source: MangaSource) {
cache.removeIf { key, _ -> key.source == source } cache.removeIf { key, _ -> key.source == source }
} }

@ -4,6 +4,7 @@ import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.AdapterListUpdateCallback import androidx.recyclerview.widget.AdapterListUpdateCallback
import androidx.recyclerview.widget.AsyncDifferConfig import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.AsyncListDiffer import androidx.recyclerview.widget.AsyncListDiffer
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.asExecutor import kotlinx.coroutines.asExecutor
@ -26,7 +27,7 @@ class FavouritesContainerAdapter(fragment: Fragment) : FragmentStateAdapter(frag
override fun getItemCount(): Int = differ.currentList.size override fun getItemCount(): Int = differ.currentList.size
override fun getItemId(position: Int): Long { override fun getItemId(position: Int): Long {
return differ.currentList[position].id return differ.currentList.getOrNull(position)?.id ?: RecyclerView.NO_ID
} }
override fun containsItem(itemId: Long): Boolean { override fun containsItem(itemId: Long): Boolean {

Loading…
Cancel
Save