From f3ff66b8fdd1a2d44fb32a01e4844b7f0348c1d9 Mon Sep 17 00:00:00 2001 From: Stian Fredrik Aune Date: Thu, 1 Dec 2022 22:07:22 +0100 Subject: [PATCH] =?UTF-8?q?Niv=C3=A5er=20og=20programmer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webui-react/src/pages/runtime/ControlsBoi.tsx | 11 ++-- .../git/ykonsole2/domain/runtime/Event.kt | 2 +- .../infrastructure/drivers/ProgramEnforcer.kt | 2 +- .../infrastructure/drivers/WorkoutWriter.kt | 2 +- .../infrastructure/testing/TestDriver.kt | 2 +- .../drivers/ProgramEnforcerTest.kt | 2 +- .../infrastructure/WorkoutExporter.kt | 2 +- .../git/ykonsole2/infrastructure/IConsole.kt | 2 +- .../infrastructure/iconsole/Client.kt | 55 ------------------- .../application/routes/ws/Connection.kt | 2 +- 10 files changed, 14 insertions(+), 68 deletions(-) delete mode 100644 ykonsole-iconsole/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/iconsole/Client.kt diff --git a/webui-react/src/pages/runtime/ControlsBoi.tsx b/webui-react/src/pages/runtime/ControlsBoi.tsx index 24b8a65..4d558e9 100644 --- a/webui-react/src/pages/runtime/ControlsBoi.tsx +++ b/webui-react/src/pages/runtime/ControlsBoi.tsx @@ -18,6 +18,7 @@ interface Option { } const skipMessages = ["Ikke hopp over", "Hopp over straks", "Hopp over nĂ¥"]; +const ENABLE_SKIP = false; export function ControlsBoi() { const {workout, disconnect, start, stop, setLevel, skip} = useContext(RuntimeContext); @@ -40,13 +41,13 @@ export function ControlsBoi() { if (workout.status === WorkoutStatus.Started) { btnList.push({icon: faPause, onClick: stop}); - if (workout.program) { + if (workout.program && ENABLE_SKIP) { const text = nextSkip > 0 ? `${nextSkip - lastTime} sek.` : ""; btnList.push({icon: faFastForward, text, warning: nextSkip >= 0, onClick: () => setMode("skip")}); - } else { - btnList.push({icon: faArrowUpRightDots, onClick: () => setMode("level")}); } + + btnList.push({icon: faArrowUpRightDots, onClick: () => setMode("level")}); } if (isStopped) { @@ -104,10 +105,10 @@ export function ControlsBoi() { }, [workout, disconnect]); useEffect(() => { - if (lastState?.level && mode === "level") { + if (lastState?.level && mode === "level" && sel === 0) { setSel(lastState.level - 1); } - }, [lastState, mode]); + }, [lastState, mode, sel]); useEffect(() => { if (lastState?.time) { diff --git a/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/domain/runtime/Event.kt b/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/domain/runtime/Event.kt index 19639cc..2dfe501 100644 --- a/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/domain/runtime/Event.kt +++ b/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/domain/runtime/Event.kt @@ -12,7 +12,7 @@ object Started : Event() object Stopped : Event() data class MilestoneReached(val keyValue: Value, val current: List, val diff: List) : Event() -object Connected : Event() +data class Connected(val initial: Boolean) : Event() object Disconnected : Event() object Skipped : Event() diff --git a/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/drivers/ProgramEnforcer.kt b/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/drivers/ProgramEnforcer.kt index 95bde13..f74ea5a 100644 --- a/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/drivers/ProgramEnforcer.kt +++ b/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/drivers/ProgramEnforcer.kt @@ -42,7 +42,7 @@ class ProgramEnforcer( } override suspend fun onEvent(event: Event, input: FlowBus) { - if (event is Connected) { + if (event is Connected && event.initial) { // Start program on connecting val programId = workoutRepo.findActive()?.apply { lastTransition = WorkoutState(workoutId = id) diff --git a/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/drivers/WorkoutWriter.kt b/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/drivers/WorkoutWriter.kt index 1a9fcf5..2e177e1 100644 --- a/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/drivers/WorkoutWriter.kt +++ b/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/drivers/WorkoutWriter.kt @@ -23,7 +23,7 @@ class WorkoutWriter( stateRepo.save(newState) } - Connected -> { + is Connected -> { foundWorkout.status = WorkoutStatus.Connected workoutRepo.save(foundWorkout) } diff --git a/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/testing/TestDriver.kt b/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/testing/TestDriver.kt index f085f48..7706f6b 100644 --- a/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/testing/TestDriver.kt +++ b/ykonsole-core/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/testing/TestDriver.kt @@ -43,7 +43,7 @@ class TestDriver(private val secondLength: Duration) : ActiveDriver() { if (command.device.connectionString.startsWith("test:")) { delay(Random.nextInt(100..300).milliseconds) connected = true - Connected + Connected(initial = true) } else { log.info("Ignoring device: ${command.device.name}") null diff --git a/ykonsole-core/src/test/kotlin/net/aiterp/git/ykonsole2/infrastructure/drivers/ProgramEnforcerTest.kt b/ykonsole-core/src/test/kotlin/net/aiterp/git/ykonsole2/infrastructure/drivers/ProgramEnforcerTest.kt index a16e965..b3bcc9d 100644 --- a/ykonsole-core/src/test/kotlin/net/aiterp/git/ykonsole2/infrastructure/drivers/ProgramEnforcerTest.kt +++ b/ykonsole-core/src/test/kotlin/net/aiterp/git/ykonsole2/infrastructure/drivers/ProgramEnforcerTest.kt @@ -73,7 +73,7 @@ internal class ProgramEnforcerTest { coEvery { output.collect(any(), any()) } coAnswers { val func = arg Unit>(1) - func.invoke(Connected) + func.invoke(Connected(initial = true)) func.invoke(Started) events.forEach { func.invoke(it) } } diff --git a/ykonsole-exporter/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/WorkoutExporter.kt b/ykonsole-exporter/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/WorkoutExporter.kt index db83aeb..e9ba143 100644 --- a/ykonsole-exporter/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/WorkoutExporter.kt +++ b/ykonsole-exporter/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/WorkoutExporter.kt @@ -17,7 +17,7 @@ class WorkoutExporter( private var workoutId: String = "" override suspend fun onEvent(event: Event, input: FlowBus) { - if (event is Connected) { + if (event is Connected && event.initial) { workoutId = workoutRepo.findActive()?.id ?: "" } diff --git a/ykonsole-iconsole/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/IConsole.kt b/ykonsole-iconsole/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/IConsole.kt index 457ad82..762aa83 100644 --- a/ykonsole-iconsole/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/IConsole.kt +++ b/ykonsole-iconsole/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/IConsole.kt @@ -150,7 +150,7 @@ class IConsole : ActiveDriver() { logger.info("Device is now ready") connected = true - output.emitBlocking(Connected) + output.emitBlocking(Connected(initial = bonusTime == 0)) } if (res is MaxLevelResponse) { diff --git a/ykonsole-iconsole/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/iconsole/Client.kt b/ykonsole-iconsole/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/iconsole/Client.kt deleted file mode 100644 index bbaaf75..0000000 --- a/ykonsole-iconsole/src/main/kotlin/net/aiterp/git/ykonsole2/infrastructure/iconsole/Client.kt +++ /dev/null @@ -1,55 +0,0 @@ -package net.aiterp.git.ykonsole2.infrastructure.iconsole - -import com.welie.blessed.* -import net.aiterp.git.ykonsole2.domain.runtime.Connected -import net.aiterp.git.ykonsole2.domain.runtime.Disconnected -import net.aiterp.git.ykonsole2.domain.runtime.ErrorOccurred -import net.aiterp.git.ykonsole2.domain.runtime.Event -import kotlinx.coroutines.channels.Channel -import kotlinx.coroutines.channels.trySendBlocking -import kotlinx.coroutines.runBlocking - -internal class Client( - private val connectionString: String, - private val eventCh: Channel, -) { - private lateinit var central: BluetoothCentralManager - private var current: BluetoothPeripheral? = null - - init { - val cbPeripheral = object : BluetoothPeripheralCallback() { - override fun onCharacteristicUpdate( - peripheral: BluetoothPeripheral, - value: ByteArray, - characteristic: BluetoothGattCharacteristic, - status: BluetoothCommandStatus, - ) { - val response = Response.fromBytes(value) - } - } - val cbScan = object : BluetoothCentralManagerCallback() { - override fun onConnectedPeripheral(peripheral: BluetoothPeripheral) { - current = peripheral - - runBlocking { eventCh.send(Connected) } - } - - override fun onConnectionFailed(peripheral: BluetoothPeripheral, status: BluetoothCommandStatus) { - runBlocking { - eventCh.send(ErrorOccurred("$connectionString: $status")) - } - } - - override fun onDiscoveredPeripheral(peripheral: BluetoothPeripheral, scanResult: ScanResult) { - if (peripheral.address != connectionString) return - - central.stopScan() - central.connectPeripheral(peripheral, cbPeripheral) - } - } - - central = BluetoothCentralManager(cbScan) - central.scanForPeripheralsWithNames(arrayOf()) - central.getPeripheral("") - } -} diff --git a/ykonsole-ktor/src/main/kotlin/net/aiterp/git/ykonsole2/application/routes/ws/Connection.kt b/ykonsole-ktor/src/main/kotlin/net/aiterp/git/ykonsole2/application/routes/ws/Connection.kt index a13dbf3..51fadd8 100644 --- a/ykonsole-ktor/src/main/kotlin/net/aiterp/git/ykonsole2/application/routes/ws/Connection.kt +++ b/ykonsole-ktor/src/main/kotlin/net/aiterp/git/ykonsole2/application/routes/ws/Connection.kt @@ -53,7 +53,7 @@ fun Route.sockets( eventBus.collect(forceAll = true) { event -> when (event) { - Connected, Started, Stopped, Disconnected, Skipped -> { + is Connected, Started, Stopped, Disconnected, Skipped -> { sendSerialized(SocketOutput(event = SocketOutput.EventDTO(name = event.name))) if (event is Disconnected) close()