Skip to content

Commit efc300c

Browse files
committed
unblocked issue with updating xml library
- improved file scanning - started adding new UI to control Queues
1 parent 2f62bc1 commit efc300c

37 files changed

+1764
-709
lines changed

src/desktopMain/kotlin/Config.kt

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -156,24 +156,15 @@ val json5 = Json5 {
156156
suspend fun updateConfig(block: suspend Config.() -> Config) {
157157
config.value = config.value.block()
158158
}
159+
159160
suspend fun Deck.updateConfig(deckConfig: DeckConfig) {
160161
updateConfig {
161162
when (id) {
162-
1 -> {
163-
copy(deck1 = deckConfig)
164-
}
165-
2 -> {
166-
copy(deck2 = deckConfig)
167-
}
168-
3 -> {
169-
copy(deck3 = deckConfig)
170-
}
171-
4 -> {
172-
copy(deck4 = deckConfig)
173-
}
174-
else -> {
175-
copy()
176-
}
163+
1 -> copy(deck1 = deckConfig)
164+
2 -> copy(deck2 = deckConfig)
165+
3 -> copy(deck3 = deckConfig)
166+
4 -> copy(deck4 = deckConfig)
167+
else -> copy()
177168
}
178169
}
179170
}

src/desktopMain/kotlin/Main.kt

Lines changed: 19 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,9 @@ import io.github.oshai.kotlinlogging.KotlinLogging
2929
import kotlinx.coroutines.Dispatchers
3030
import kotlinx.coroutines.FlowPreview
3131
import kotlinx.coroutines.delay
32-
import kotlinx.coroutines.flow.consumeAsFlow
3332
import kotlinx.coroutines.flow.debounce
34-
import kotlinx.coroutines.flow.distinctUntilChanged
3533
import kotlinx.coroutines.flow.flowOn
3634
import kotlinx.coroutines.flow.launchIn
37-
import kotlinx.coroutines.flow.mapNotNull
3835
import kotlinx.coroutines.flow.merge
3936
import kotlinx.coroutines.flow.onEach
4037
import kotlinx.coroutines.launch
@@ -44,31 +41,29 @@ import kotlinx.serialization.json.Json
4441
import nestctrl.generated.resources.Res
4542
import nestctrl.generated.resources.blobhai_trans
4643
import nestdrop.deck.Deck
47-
import nestdrop.deck.PresetQueues
44+
import nestdrop.deck.Queues
4845
import nestdrop.deck.loadDeckSettings
4946
import nestdrop.loadNestdropConfig
50-
import nestdrop.parseNestdropXml
5147
import nestdrop.setupSpriteFX
48+
import nestdrop.watchNestdropConfig
5249
import org.jetbrains.compose.resources.painterResource
5350
import osc.runNestDropSend
5451
import osc.startNestdropOSC
5552
import tags.startTagsFileWatcher
5653
import ui.App
5754
import ui.components.verticalScroll
5855
import ui.splashScreen
59-
import utils.KWatchChannel
60-
import utils.KWatchEvent
61-
import utils.asWatchChannel
6256
import java.text.SimpleDateFormat
6357
import java.util.*
58+
import kotlin.time.Duration.Companion.milliseconds
6459
import kotlin.time.Duration.Companion.seconds
6560
import kotlin.time.measureTime
6661

6762

6863
private val logger = KotlinLogging.logger { }
6964
//val decks = MutableStateFlow<List<Deck>>(emptyList())
7065

71-
val presetQueues = PresetQueues()
66+
val QUEUES = Queues()
7267
val 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

Comments
 (0)