@@ -29,12 +29,9 @@ import io.github.oshai.kotlinlogging.KotlinLogging
2929import kotlinx.coroutines.Dispatchers
3030import kotlinx.coroutines.FlowPreview
3131import kotlinx.coroutines.delay
32- import kotlinx.coroutines.flow.consumeAsFlow
3332import kotlinx.coroutines.flow.debounce
34- import kotlinx.coroutines.flow.distinctUntilChanged
3533import kotlinx.coroutines.flow.flowOn
3634import kotlinx.coroutines.flow.launchIn
37- import kotlinx.coroutines.flow.mapNotNull
3835import kotlinx.coroutines.flow.merge
3936import kotlinx.coroutines.flow.onEach
4037import kotlinx.coroutines.launch
@@ -44,31 +41,29 @@ import kotlinx.serialization.json.Json
4441import nestctrl.generated.resources.Res
4542import nestctrl.generated.resources.blobhai_trans
4643import nestdrop.deck.Deck
47- import nestdrop.deck.PresetQueues
44+ import nestdrop.deck.Queues
4845import nestdrop.deck.loadDeckSettings
4946import nestdrop.loadNestdropConfig
50- import nestdrop.parseNestdropXml
5147import nestdrop.setupSpriteFX
48+ import nestdrop.watchNestdropConfig
5249import org.jetbrains.compose.resources.painterResource
5350import osc.runNestDropSend
5451import osc.startNestdropOSC
5552import tags.startTagsFileWatcher
5653import ui.App
5754import ui.components.verticalScroll
5855import ui.splashScreen
59- import utils.KWatchChannel
60- import utils.KWatchEvent
61- import utils.asWatchChannel
6256import java.text.SimpleDateFormat
6357import java.util.*
58+ import kotlin.time.Duration.Companion.milliseconds
6459import kotlin.time.Duration.Companion.seconds
6560import kotlin.time.measureTime
6661
6762
6863private val logger = KotlinLogging .logger { }
6964// val decks = MutableStateFlow<List<Deck>>(emptyList())
7065
71- val presetQueues = PresetQueues ()
66+ val QUEUES = Queues ()
7267val decks = List (4 ) { index ->
7368 when (val n = index + 1 ) {
7469 1 -> Deck (n, Color .hsl(0f , 1f , 0.5f )) // 0xFFff0000
@@ -83,7 +78,7 @@ object Main {
8378
8479 @OptIn(FlowPreview ::class )
8580 suspend fun initApplication (
86- presetQueues : PresetQueues ,
81+ queues : Queues ,
8782 ) {
8883// setupLogging()
8984// logger.info {"testing logging.."}
@@ -122,7 +117,7 @@ object Main {
122117
123118// delay(100)
124119 logger.info { " starting filewatcher ./tags" }
125- startTagsFileWatcher(presetQueues )
120+ startTagsFileWatcher(queues )
126121
127122 run {
128123 logger.info { " starting history writer" }
@@ -155,36 +150,23 @@ object Main {
155150
156151// OSCMessage("thiswillfail", "string", 'c', "" to "")
157152
153+ val nestdropSettingsState = watchNestdropConfig()
154+
158155 run {
159- logger.info { " loading nestdrop XML" }
160- loadNestdropConfig(parseNestdropXml(), presetQueues, decks)
161-
162- nestdropConfig
163- .asWatchChannel(KWatchChannel .Mode .SingleFile )
164- .consumeAsFlow().mapNotNull {
165- if (it.kind == KWatchEvent .Kind .Modified ) {
166- try {
167- parseNestdropXml()
168- } catch (e: Exception ) {
169- logger.error(e) { " failed to load XML after file modification was detected" }
170- null
171- }
172- } else {
173- null
174- }
175- }
176- .distinctUntilChanged()
177- .onEach {
178- logger.info { " parsed (changed) xml from $nestdropConfig " }
179- loadNestdropConfig(it, presetQueues, decks)
156+ // loadNestdropConfig(nestdropSettingsState.value, presetQueues, decks)
157+
158+ nestdropSettingsState
159+ .onEach { nestdropSettings ->
160+ logger.info { " loading nestdrop config" }
161+ loadNestdropConfig(nestdropSettings, queues, decks)
180162 }
181163 .launchIn(flowScope)
182164 }
183165
184166
185167 withTimeoutOrNull(45 .seconds) {
186168 logger.info { " waiting for queues to be initialized" }
187- while (! presetQueues .isInitialized.value) {
169+ while (! queues .isInitialized.value) {
188170 delay(100 )
189171 }
190172 true
@@ -194,7 +176,7 @@ object Main {
194176 loadConfig()
195177 delay(500 )
196178
197- presetQueues .startFlows()
179+ queues .startFlows()
198180 flowScope.launch {
199181 decks.forEach { deck ->
200182 launch {
@@ -203,7 +185,8 @@ object Main {
203185 }
204186 }
205187
206- loadDeckSettings(decks)
188+ nestdropSettingsState.value.loadDeckSettings(decks)
189+ delay(250 .milliseconds)
207190
208191// decks.forEach {
209192// it.imgSprite.index.value++
@@ -255,7 +238,7 @@ object Main {
255238 var showException by remember { mutableStateOf<Throwable ?>(null ) }
256239 LaunchedEffect (Unit ) {
257240 try {
258- initApplication(presetQueues )
241+ initApplication(QUEUES )
259242 logger.info { " await application" }
260243 isSplashScreenShowing = false
261244 } catch (e: Exception ) {
0 commit comments