mirror of
https://github.com/bbara04/Purefin.git
synced 2026-03-31 17:10:08 +02:00
Refactor image loading configuration and improve item key handling in lists
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package hu.bbara.purefin
|
||||
|
||||
import android.content.pm.ApplicationInfo
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
@@ -8,7 +9,7 @@ import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import coil3.ImageLoader
|
||||
import coil3.compose.setSingletonImageLoaderFactory
|
||||
import coil3.SingletonImageLoader
|
||||
import coil3.disk.DiskCache
|
||||
import coil3.memory.MemoryCache
|
||||
import coil3.network.okhttp.OkHttpNetworkFetcherFactory
|
||||
@@ -38,41 +39,20 @@ class PurefinActivity : ComponentActivity() {
|
||||
@Inject
|
||||
lateinit var authInterceptor: JellyfinAuthInterceptor
|
||||
|
||||
private val imageOkHttpClient: OkHttpClient by lazy {
|
||||
OkHttpClient.Builder()
|
||||
.addNetworkInterceptor(authInterceptor)
|
||||
.build()
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
lifecycleScope.launch { init() }
|
||||
configureImageLoader()
|
||||
enableEdgeToEdge()
|
||||
setContent {
|
||||
PurefinTheme {
|
||||
setSingletonImageLoaderFactory { context ->
|
||||
ImageLoader.Builder(context)
|
||||
.components {
|
||||
add(
|
||||
OkHttpNetworkFetcherFactory(
|
||||
callFactory = {
|
||||
OkHttpClient.Builder()
|
||||
.addNetworkInterceptor(authInterceptor)
|
||||
.build()
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
.memoryCache {
|
||||
MemoryCache.Builder()
|
||||
.maxSizePercent(context, 0.10)
|
||||
.build()
|
||||
}
|
||||
.diskCache {
|
||||
DiskCache.Builder()
|
||||
.directory(context.cacheDir.resolve("image_cache").absolutePath.toPath())
|
||||
.maxSizeBytes(30000000)
|
||||
.build()
|
||||
}
|
||||
.logger(DebugLogger())
|
||||
.crossfade(true)
|
||||
.build()
|
||||
}
|
||||
val isLoggedIn by userSessionRepository.isLoggedIn.collectAsState(initial = false)
|
||||
if (isLoggedIn) {
|
||||
HomePage()
|
||||
@@ -86,4 +66,39 @@ class PurefinActivity : ComponentActivity() {
|
||||
private suspend fun init() {
|
||||
jellyfinApiClient.updateApiClient()
|
||||
}
|
||||
|
||||
private fun configureImageLoader() {
|
||||
SingletonImageLoader.setSafe { context ->
|
||||
val builder = ImageLoader.Builder(context)
|
||||
.components {
|
||||
add(
|
||||
OkHttpNetworkFetcherFactory(
|
||||
callFactory = { imageOkHttpClient }
|
||||
)
|
||||
)
|
||||
}
|
||||
.memoryCache {
|
||||
MemoryCache.Builder()
|
||||
.maxSizePercent(context, 0.20)
|
||||
.build()
|
||||
}
|
||||
.diskCache {
|
||||
DiskCache.Builder()
|
||||
.directory(context.cacheDir.resolve("image_cache").absolutePath.toPath())
|
||||
.maxSizeBytes(30000000)
|
||||
.build()
|
||||
}
|
||||
.crossfade(true)
|
||||
|
||||
if (isDebuggable()) {
|
||||
builder.logger(DebugLogger())
|
||||
}
|
||||
|
||||
builder.build()
|
||||
}
|
||||
}
|
||||
|
||||
private fun isDebuggable(): Boolean {
|
||||
return (applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE) != 0
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,10 @@ fun HomeContent(
|
||||
colors = colors
|
||||
)
|
||||
}
|
||||
items(libraries) { item ->
|
||||
items(
|
||||
items = libraries,
|
||||
key = { it.id }
|
||||
) { item ->
|
||||
LibraryPosterSection(
|
||||
title = item.name,
|
||||
items = libraryContent[item.id] ?: emptyList(),
|
||||
|
||||
@@ -50,7 +50,10 @@ fun ContinueWatchingSection(
|
||||
contentPadding = PaddingValues(horizontal = 16.dp),
|
||||
horizontalArrangement = Arrangement.spacedBy(16.dp)
|
||||
) {
|
||||
items(items) { item ->
|
||||
items(
|
||||
items = items,
|
||||
key = { it.id }
|
||||
) { item ->
|
||||
ContinueWatchingCard(
|
||||
item = item,
|
||||
colors = colors
|
||||
@@ -145,7 +148,10 @@ fun LibraryPosterSection(
|
||||
contentPadding = PaddingValues(horizontal = 16.dp),
|
||||
horizontalArrangement = Arrangement.spacedBy(16.dp)
|
||||
) {
|
||||
items(items) { item ->
|
||||
items(
|
||||
items = items,
|
||||
key = { it.id }
|
||||
) { item ->
|
||||
PosterCard(
|
||||
item = item,
|
||||
colors = colors
|
||||
|
||||
Reference in New Issue
Block a user