Librechat-Mobile/app/src/main/kotlin/com/garfiec/librechat/LibreChatApplication.kt

81 lines
2.9 KiB
Kotlin

package com.garfiec.librechat
import android.app.Application
import coil3.ImageLoader
import coil3.SingletonImageLoader
import coil3.disk.DiskCache
import coil3.disk.directory
import coil3.memory.MemoryCache
import coil3.network.ktor3.KtorNetworkFetcherFactory
import coil3.request.crossfade
import com.garfiec.librechat.core.common.di.commonModule
import com.garfiec.librechat.core.data.di.dataModule
import com.garfiec.librechat.core.network.di.networkModule
import com.garfiec.librechat.feature.agents.di.agentsModule
import com.garfiec.librechat.feature.auth.di.authModule
import com.garfiec.librechat.feature.auth.di.authPlatformModule
import com.garfiec.librechat.feature.chat.di.chatModule
import com.garfiec.librechat.feature.conversations.di.conversationsModule
import com.garfiec.librechat.feature.files.di.filesModule
import com.garfiec.librechat.feature.settings.di.settingsModule
import com.garfiec.librechat.shared.navigation.sharedAppModule
import io.ktor.client.HttpClient
import org.koin.android.ext.android.get
import org.koin.android.ext.koin.androidContext
import org.koin.android.ext.koin.androidLogger
import org.koin.core.context.startKoin
import co.touchlab.kermit.Logger
class LibreChatApplication : Application(), SingletonImageLoader.Factory {
override fun onCreate() {
super.onCreate()
try {
startKoin {
if (BuildConfig.DEBUG) {
androidLogger(org.koin.core.logger.Level.DEBUG)
}
androidContext(this@LibreChatApplication)
allowOverride(false)
modules(
commonModule,
networkModule,
dataModule,
sharedAppModule,
authModule,
authPlatformModule,
chatModule,
conversationsModule,
settingsModule,
agentsModule,
filesModule,
)
}
} catch (e: Exception) {
Logger.e(e) { "Koin initialization failed" }
throw e // Always rethrow — DI failure is unrecoverable
}
}
override fun newImageLoader(context: coil3.PlatformContext): ImageLoader {
val httpClient: HttpClient = get()
return ImageLoader.Builder(context)
.components {
add(KtorNetworkFetcherFactory(httpClient))
}
.memoryCache {
MemoryCache.Builder()
.maxSizePercent(context, 0.25)
.build()
}
.diskCache {
DiskCache.Builder()
.directory(cacheDir.resolve("image_cache"))
.maxSizeBytes(250L * 1024 * 1024) // 250 MB
.build()
}
.crossfade(true)
.build()
}
}