Skip to content

Commit

Permalink
migrate from kamel to coil
Browse files Browse the repository at this point in the history
  • Loading branch information
DatL4g committed Dec 12, 2023
1 parent 431c6fd commit 4693569
Show file tree
Hide file tree
Showing 26 changed files with 301 additions and 138 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,6 @@ import dev.datlag.burningseries.shared.ui.custom.Permission
import dev.datlag.burningseries.shared.ui.navigation.NavHostComponent
import dev.datlag.kast.Kast
import dev.icerock.moko.resources.compose.stringResource
import io.kamel.core.config.KamelConfig
import io.kamel.core.config.takeFrom
import io.kamel.image.config.Default
import io.kamel.image.config.LocalKamelConfig
import io.kamel.image.config.resourcesFetcher
import io.kamel.image.config.resourcesIdMapper

class MainActivity : AppCompatActivity() {

Expand All @@ -50,11 +44,6 @@ class MainActivity : AppCompatActivity() {
enableEdgeToEdge()

val di = ((applicationContext as? App) ?: (application as App)).di
val imageConfig = KamelConfig {
takeFrom(KamelConfig.Default)
resourcesFetcher(this@MainActivity)
resourcesIdMapper(this@MainActivity)
}

val lifecycleOwner = object : LifecycleOwner {
override val lifecycle: Lifecycle = essentyLifecycle()
Expand All @@ -73,7 +62,6 @@ class MainActivity : AppCompatActivity() {

setContent {
CompositionLocalProvider(
LocalKamelConfig provides imageConfig,
LocalLifecycleOwner provides lifecycleOwner
) {
App(di) {
Expand Down
12 changes: 1 addition & 11 deletions app/desktop/src/jvmMain/kotlin/dev/datlag/burningseries/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,6 @@ import dev.icerock.moko.resources.desc.Resource
import dev.icerock.moko.resources.desc.StringDesc
import io.github.aakira.napier.DebugAntilog
import io.github.aakira.napier.Napier
import io.kamel.core.config.KamelConfig
import io.kamel.core.config.takeFrom
import io.kamel.image.config.Default
import io.kamel.image.config.LocalKamelConfig
import io.kamel.image.config.resourcesFetcher
import kotlinx.coroutines.runBlocking
import org.kodein.di.DI
import org.kodein.di.bindSingleton
Expand Down Expand Up @@ -97,10 +92,6 @@ private fun runWindow(di: DI) {
),
di = di
)
val imageConfig = KamelConfig {
takeFrom(KamelConfig.Default)
resourcesFetcher()
}

disposableSingleWindowApplication(
state = windowState,
Expand Down Expand Up @@ -139,8 +130,7 @@ private fun runWindow(di: DI) {
InitCEF {
CompositionLocalProvider(
LocalLifecycleOwner provides lifecycleOwner,
LocalWindow provides this.window,
LocalKamelConfig provides imageConfig
LocalWindow provides this.window
) {
App(di) {
PredictiveBackGestureOverlay(
Expand Down
7 changes: 6 additions & 1 deletion app/shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ kotlin {
implementation(libs.aboutlibraries)
implementation(libs.aboutlibraries.compose)

api(libs.kamel)
api(libs.moko.resources.compose)
api(libs.blurhash)
api(libs.kmpalette)
Expand All @@ -68,6 +67,9 @@ kotlin {
api(libs.ktor.serialization.json)

api("dev.datlag.kast:kast:0.1.7-SNAPSHOT")
api("io.coil-kt.coil3:coil:3.0.0-SNAPSHOT")
api("io.coil-kt.coil3:coil-network:3.0.0-SNAPSHOT")
api("io.coil-kt.coil3:coil-compose:3.0.0-SNAPSHOT")

api(project(":model"))
api(project(":network"))
Expand Down Expand Up @@ -101,6 +103,9 @@ kotlin {
api(libs.webview.android)
api(libs.permission)
api(libs.nanoid)

api("io.coil-kt.coil3:coil-gif:3.0.0-SNAPSHOT")
api("io.coil-kt.coil3:coil-svg:3.0.0-SNAPSHOT")
}
}
val desktopMain by getting {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
package dev.datlag.burningseries.shared.module

import android.content.Context
import android.os.Build
import coil3.ImageLoader
import coil3.PlatformContext
import coil3.annotation.ExperimentalCoilApi
import coil3.decode.GifDecoder
import coil3.decode.ImageDecoderDecoder
import coil3.decode.SvgDecoder
import coil3.disk.DiskCache
import coil3.fetch.NetworkFetcher
import coil3.memory.MemoryCache
import coil3.request.crossfade
import dev.datlag.burningseries.database.DriverFactory
import dev.datlag.burningseries.shared.Sekret
import dev.datlag.burningseries.shared.getPackageName
Expand All @@ -14,6 +25,7 @@ import io.ktor.client.plugins.contentnegotiation.*
import io.ktor.http.*
import io.ktor.serialization.kotlinx.json.*
import kotlinx.serialization.json.Json
import okio.FileSystem
import org.kodein.di.DI
import org.kodein.di.bindEagerSingleton
import org.kodein.di.bindSingleton
Expand All @@ -24,6 +36,7 @@ actual object PlatformModule {

private const val NAME = "PlatformModuleAndroid"

@OptIn(ExperimentalCoilApi::class)
actual val di: DI.Module = DI.Module(NAME) {
bindSingleton {
Json {
Expand Down Expand Up @@ -62,6 +75,34 @@ actual object PlatformModule {
)
}
}
bindSingleton<PlatformContext> {
instance<Context>()
}
bindSingleton {
ImageLoader.Builder(instance())
.components {
add(NetworkFetcher.Factory(lazyOf(instance<HttpClient>())))
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
add(ImageDecoderDecoder.Factory())
} else {
add(GifDecoder.Factory())
}
add(SvgDecoder.Factory())
}
.memoryCache {
MemoryCache.Builder()
.maxSizePercent(instance())
.build()
}
.diskCache {
DiskCache.Builder()
.directory(FileSystem.SYSTEM_TEMPORARY_DIRECTORY / "image_cache")
.maxSizeBytes(512L * 1024 * 1024) // 512MB
.build()
}
.crossfade(true)
.build()
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import dev.datlag.burningseries.shared.ui.theme.*
import org.kodein.di.DI

val LocalDarkMode = compositionLocalOf<Boolean> { error("No dark mode state provided") }
val LocalDI = compositionLocalOf<DI> { error("No dependency injection provided") }

@Composable
fun App(
Expand All @@ -31,7 +32,8 @@ fun App(
}

CompositionLocalProvider(
LocalDarkMode provides systemDarkTheme
LocalDarkMode provides systemDarkTheme,
LocalDI provides di
) {
MaterialTheme(
colorScheme = if (systemDarkTheme) Colors.getDarkScheme() else Colors.getLightScheme(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package dev.datlag.burningseries.shared.ui.navigation

import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import com.arkivanov.decompose.ComponentContext
import com.arkivanov.decompose.extensions.compose.jetbrains.stack.Children
import com.arkivanov.decompose.router.stack.StackNavigation
import com.arkivanov.decompose.router.stack.childStack
import com.arkivanov.decompose.router.stack.pop
import com.arkivanov.decompose.router.stack.push
import dev.datlag.burningseries.shared.LocalDI
import dev.datlag.burningseries.shared.common.backAnimation
import dev.datlag.burningseries.shared.ui.screen.initial.InitialScreenComponent
import dev.datlag.burningseries.shared.ui.screen.video.VideoScreenComponent
Expand Down Expand Up @@ -67,7 +69,11 @@ class NavHostComponent(
}
)
) {
it.instance.render()
CompositionLocalProvider(
LocalDI provides di
) {
it.instance.render()
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@ import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.Home
import androidx.compose.material.icons.filled.Search
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import com.arkivanov.decompose.ComponentContext
import com.arkivanov.decompose.ExperimentalDecomposeApi
import com.arkivanov.decompose.router.pages.*
import com.arkivanov.decompose.value.Value
import dev.datlag.burningseries.model.Series
import dev.datlag.burningseries.shared.LocalDI
import dev.datlag.burningseries.shared.SharedRes
import dev.datlag.burningseries.shared.ui.navigation.Component
import dev.datlag.burningseries.shared.ui.screen.initial.favorite.FavoriteScreenComponent
Expand Down Expand Up @@ -67,7 +69,11 @@ class InitialScreenComponent(

@Composable
override fun render() {
InitialScreen(this)
CompositionLocalProvider(
LocalDI provides di
) {
InitialScreen(this)
}
}

private fun createChild(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.datlag.burningseries.shared.ui.screen.initial.favorite

import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import app.cash.sqldelight.coroutines.asFlow
import app.cash.sqldelight.coroutines.mapToList
import com.arkivanov.decompose.ComponentContext
Expand All @@ -10,6 +11,7 @@ import dev.datlag.burningseries.database.BurningSeries
import dev.datlag.burningseries.database.Series
import dev.datlag.burningseries.model.algorithm.JaroWinkler
import dev.datlag.burningseries.model.common.safeSubList
import dev.datlag.burningseries.shared.LocalDI
import dev.datlag.burningseries.shared.common.ioDispatcher
import dev.datlag.burningseries.shared.common.ioScope
import dev.datlag.burningseries.shared.ui.navigation.Component
Expand Down Expand Up @@ -85,7 +87,11 @@ class FavoriteScreenComponent(

@Composable
override fun render() {
FavoriteScreen(this)
CompositionLocalProvider(
LocalDI provides di
) {
FavoriteScreen(this)
}
}

override fun itemClicked(config: FavoriteConfig) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.datlag.burningseries.shared.ui.screen.initial.home

import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import com.arkivanov.decompose.ComponentContext
import com.arkivanov.decompose.router.slot.*
import com.arkivanov.decompose.value.Value
Expand All @@ -12,6 +13,7 @@ import dev.datlag.burningseries.model.state.HomeState
import dev.datlag.burningseries.model.state.ReleaseState
import dev.datlag.burningseries.network.state.HomeStateMachine
import dev.datlag.burningseries.network.state.ReleaseStateMachine
import dev.datlag.burningseries.shared.LocalDI
import dev.datlag.burningseries.shared.common.ioDispatcher
import dev.datlag.burningseries.shared.common.ioScope
import dev.datlag.burningseries.shared.common.launchIO
Expand Down Expand Up @@ -74,7 +76,11 @@ class HomeScreenComponent(

@Composable
override fun render() {
HomeScreen(this)
CompositionLocalProvider(
LocalDI provides di
) {
HomeScreen(this)
}
}

override fun retryLoadingHome(): Any? = ioScope().launchIO {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package dev.datlag.burningseries.shared.ui.screen.initial.home.component

import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.grid.LazyGridItemScope
Expand All @@ -15,15 +14,19 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import coil3.ImageLoader
import coil3.PlatformContext
import coil3.compose.AsyncImage
import coil3.request.ImageRequest
import dev.datlag.burningseries.model.BSUtil
import dev.datlag.burningseries.model.Home
import dev.datlag.burningseries.shared.LocalDI
import dev.datlag.burningseries.shared.common.bounceClick
import dev.datlag.burningseries.shared.common.focusScale
import dev.datlag.burningseries.shared.common.onClick
import dev.datlag.burningseries.shared.ui.custom.AutoSizeText
import dev.datlag.burningseries.shared.ui.custom.CountryImage
import io.kamel.core.Resource
import io.kamel.image.asyncPainterResource
import org.kodein.di.instance

@OptIn(ExperimentalFoundationApi::class)
@Composable
Expand All @@ -39,24 +42,22 @@ fun LazyGridItemScope.EpisodeItem(episode: Home.Episode, onclick: () -> Unit) {
Surface(
shape = CardDefaults.elevatedShape
) {
when (val resource = asyncPainterResource(episode.coverHref?.let { BSUtil.getBurningSeriesLink(it) } ?: String())) {
is Resource.Loading, is Resource.Failure -> {
Box(
modifier = Modifier
.aspectRatio(1F, true)
.clip(CardDefaults.elevatedShape)
.background(MaterialTheme.colorScheme.tertiaryContainer)
)
}
is Resource.Success -> {
Image(
painter = resource.value,
contentScale = ContentScale.FillWidth,
contentDescription = episode.bestTitle,
modifier = Modifier.aspectRatio(1F, true)
)
}
}
val platformContext: PlatformContext by LocalDI.current.instance()
val imageLoader: ImageLoader by LocalDI.current.instance()

AsyncImage(
model = ImageRequest.Builder(platformContext)
.data(episode.coverHref?.let { BSUtil.getBurningSeriesLink(it) })
.placeholderMemoryCacheKey(episode.coverHref)
.build(),
imageLoader = imageLoader,
contentDescription = episode.bestTitle,
contentScale = ContentScale.FillWidth,
modifier = Modifier
.aspectRatio(1F, true)
.clip(CardDefaults.elevatedShape)
.background(MaterialTheme.colorScheme.tertiaryContainer)
)
}
Column(
modifier = Modifier.padding(8.dp),
Expand Down
Loading

0 comments on commit 4693569

Please sign in to comment.