@@ -7,6 +7,8 @@ import com.mmk.kmpnotifier.notification.configuration.NotificationPlatformConfig
77import kotlinx.coroutines.CoroutineScope
88import kotlinx.coroutines.Dispatchers
99import kotlinx.coroutines.SupervisorJob
10+ import kotlinx.coroutines.flow.first
11+ import kotlinx.coroutines.launch
1012import org.jetbrains.kotlinconf.navigation.navigateToSession
1113import org.jetbrains.kotlinconf.screens.AboutConferenceViewModel
1214import org.jetbrains.kotlinconf.screens.LicensesViewModel
@@ -19,6 +21,7 @@ import org.jetbrains.kotlinconf.screens.SpeakersViewModel
1921import org.jetbrains.kotlinconf.screens.StartNotificationsViewModel
2022import org.jetbrains.kotlinconf.storage.ApplicationStorage
2123import org.jetbrains.kotlinconf.storage.MultiplatformSettingsStorage
24+ import org.jetbrains.kotlinconf.utils.BufferedDelegatingLogger
2225import org.jetbrains.kotlinconf.utils.DebugLogger
2326import org.jetbrains.kotlinconf.utils.Logger
2427import org.jetbrains.kotlinconf.utils.NoopProdLogger
@@ -36,18 +39,31 @@ fun initApp(
3639 platformModule : Module ,
3740 flags : Flags = Flags (),
3841) {
39- val koin = initKoin(platformLogger, platformModule, flags)
40- initNotifier(configuration = koin.get(), logger = koin.get())
42+ val appScope = CoroutineScope (SupervisorJob () + Dispatchers .Default )
43+ val koin = initKoin(appScope, platformModule, flags)
44+ initLogging(
45+ appScope = appScope,
46+ platformLogger = platformLogger,
47+ bufferedDelegatingLogger = koin.get(),
48+ applicationStorage = koin.get(),
49+ )
50+ initNotifier(
51+ configuration = koin.get(),
52+ logger = koin.get(),
53+ )
4154}
4255
4356private fun initKoin (
44- platformLogger : Logger ,
57+ appScope : CoroutineScope ,
4558 platformModule : Module ,
4659 platformFlags : Flags ,
4760): Koin {
4861 return startKoin {
4962 val appModule = module {
50- single<ApplicationStorage > { MultiplatformSettingsStorage (get()) }
63+ single { BufferedDelegatingLogger () }
64+ single<Logger > { get<BufferedDelegatingLogger >() }
65+
66+ single<ApplicationStorage > { MultiplatformSettingsStorage (get(), get()) }
5167 single {
5268 val flags = get<ApplicationStorage >().getFlagsBlocking()
5369 val endpoint = when {
@@ -63,15 +79,8 @@ private fun initKoin(
6379 else -> ServerBasedTimeProvider (get())
6480 }
6581 }
66- single<Logger > {
67- val flags = get<ApplicationStorage >().getFlagsBlocking()
68- when {
69- flags != null && flags.debugLogging -> DebugLogger (platformLogger)
70- else -> NoopProdLogger ()
71- }
72- }
7382 single { FlagsManager (platformFlags, get(), get()) }
74- single { CoroutineScope ( SupervisorJob () + Dispatchers . Default ) }
83+ single { appScope }
7584 singleOf(::ConferenceService )
7685 }
7786
@@ -93,6 +102,23 @@ private fun initKoin(
93102 }.koin
94103}
95104
105+ private fun initLogging (
106+ appScope : CoroutineScope ,
107+ platformLogger : Logger ,
108+ bufferedDelegatingLogger : BufferedDelegatingLogger ,
109+ applicationStorage : ApplicationStorage ,
110+ ) {
111+ appScope.launch {
112+ val flags = applicationStorage.getFlags().first()
113+ bufferedDelegatingLogger.attach(
114+ when {
115+ flags != null && flags.debugLogging -> DebugLogger (platformLogger)
116+ else -> NoopProdLogger ()
117+ }
118+ )
119+ }
120+ }
121+
96122private fun initNotifier (
97123 configuration : NotificationPlatformConfiguration ,
98124 logger : Logger ,
0 commit comments