From 53a79e24ea31dda0d9d3d7024ce60bdbedb3a1a4 Mon Sep 17 00:00:00 2001 From: DatLag Date: Thu, 16 Nov 2023 01:11:14 +0100 Subject: [PATCH] prevent potential crash --- .../kotlin/dev/datlag/burningseries/App.kt | 3 ++- .../kotlin/dev/datlag/burningseries/Main.kt | 3 ++- .../datlag/burningseries/module/NetworkModule.kt | 14 +++++++------- .../dev/datlag/burningseries/other/StateSaver.kt | 2 ++ .../network/state/EpisodeStateMachine.kt | 4 ++-- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/app/android/src/androidMain/kotlin/dev/datlag/burningseries/App.kt b/app/android/src/androidMain/kotlin/dev/datlag/burningseries/App.kt index 9ce59b63..26729e21 100644 --- a/app/android/src/androidMain/kotlin/dev/datlag/burningseries/App.kt +++ b/app/android/src/androidMain/kotlin/dev/datlag/burningseries/App.kt @@ -2,6 +2,7 @@ package dev.datlag.burningseries import androidx.multidex.MultiDexApplication import dev.datlag.burningseries.module.NetworkModule +import dev.datlag.burningseries.other.StateSaver import dev.datlag.sekret.NativeLoader import io.github.aakira.napier.DebugAntilog import io.github.aakira.napier.Napier @@ -27,6 +28,6 @@ class App : MultiDexApplication(), DIAware { if (BuildConfig.DEBUG) { Napier.base(DebugAntilog()) } - NativeLoader.loadLibrary("sekret") + StateSaver.sekretLibraryLoaded = NativeLoader.loadLibrary("sekret") } } \ No newline at end of file diff --git a/app/desktop/src/jvmMain/kotlin/dev/datlag/burningseries/Main.kt b/app/desktop/src/jvmMain/kotlin/dev/datlag/burningseries/Main.kt index baa9c47c..7d4ba588 100644 --- a/app/desktop/src/jvmMain/kotlin/dev/datlag/burningseries/Main.kt +++ b/app/desktop/src/jvmMain/kotlin/dev/datlag/burningseries/Main.kt @@ -20,6 +20,7 @@ import dev.datlag.burningseries.common.lifecycle.LocalLifecycleOwner import dev.datlag.burningseries.model.common.systemProperty import dev.datlag.burningseries.module.NetworkModule import dev.datlag.burningseries.SharedRes +import dev.datlag.burningseries.other.StateSaver import dev.datlag.burningseries.ui.navigation.NavHostComponent import dev.datlag.burningseries.window.disposableSingleWindowApplication import dev.datlag.sekret.NativeLoader @@ -46,7 +47,7 @@ private fun runWindow() { AppIO.applyTitle(appTitle) Napier.base(DebugAntilog()) - NativeLoader.loadLibrary("sekret", systemProperty("compose.application.resources.dir")?.let { File(it) }) + StateSaver.sekretLibraryLoaded = NativeLoader.loadLibrary("sekret", systemProperty("compose.application.resources.dir")?.let { File(it) }) val windowState = WindowState() val lifecycle = LifecycleRegistry() diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/module/NetworkModule.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/module/NetworkModule.kt index fc32a2db..6adee27f 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/module/NetworkModule.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/module/NetworkModule.kt @@ -9,16 +9,14 @@ import dev.datlag.burningseries.network.JsonBase import dev.datlag.burningseries.network.state.EpisodeStateMachine import dev.datlag.burningseries.network.state.HomeStateMachine import dev.datlag.burningseries.network.state.SearchStateMachine +import dev.datlag.burningseries.other.StateSaver import io.ktor.client.* import io.realm.kotlin.mongodb.App import io.realm.kotlin.mongodb.AppConfiguration import io.realm.kotlin.mongodb.Credentials import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope -import org.kodein.di.DI -import org.kodein.di.bindEagerSingleton -import org.kodein.di.bindSingleton -import org.kodein.di.instance +import org.kodein.di.* object NetworkModule { @@ -50,11 +48,13 @@ object NetworkModule { bindSingleton { SearchStateMachine(instance()) } - bindEagerSingleton { - App.create(Sekret().mongoApplication(getPackageName())!!) + if (StateSaver.sekretLibraryLoaded) { + bindEagerSingleton { + App.create(Sekret().mongoApplication(getPackageName())!!) + } } bindEagerSingleton { - EpisodeStateMachine(instance(), instance()) + EpisodeStateMachine(instance(), instanceOrNull()) } } } \ No newline at end of file diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/other/StateSaver.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/other/StateSaver.kt index 486776db..2f48c7ff 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/other/StateSaver.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/other/StateSaver.kt @@ -6,4 +6,6 @@ data object StateSaver { var seriesListIndex: Int = 0 var seriesListOffset: Int = 0 + + var sekretLibraryLoaded: Boolean = false } \ No newline at end of file diff --git a/network/src/commonMain/kotlin/dev/datlag/burningseries/network/state/EpisodeStateMachine.kt b/network/src/commonMain/kotlin/dev/datlag/burningseries/network/state/EpisodeStateMachine.kt index 94554b2e..86816e30 100644 --- a/network/src/commonMain/kotlin/dev/datlag/burningseries/network/state/EpisodeStateMachine.kt +++ b/network/src/commonMain/kotlin/dev/datlag/burningseries/network/state/EpisodeStateMachine.kt @@ -20,7 +20,7 @@ import org.mongodb.kbson.BsonDocument @OptIn(ExperimentalCoroutinesApi::class) class EpisodeStateMachine( private val jsonBase: JsonBase, - private val app: App + private val app: App? ) : FlowReduxStateMachine(initialState = EpisodeState.Waiting) { private var user: User? = null @@ -31,7 +31,7 @@ class EpisodeStateMachine( onEnterEffect { if (user == null) { try { - user = app.login(Credentials.anonymous()) + user = app?.login(Credentials.anonymous()) } catch (ignored: Throwable) { } } }