From fcf06e6fdbf8fc54fa30be4776373b1cb2734972 Mon Sep 17 00:00:00 2001 From: Vladimir Zdravkovic Date: Thu, 4 Jul 2024 15:08:32 +0200 Subject: [PATCH 1/3] feat: updated the commands to be typed instead of hardcoded strings --- .../zeapp/zeservices/ZeBadgeManager.kt | 24 +-- .../berlindroid/zekompanion/BadgeManager.kt | 162 +++++++++++++++++- .../berlindroid/zekompanion/terminal/Main.kt | 12 +- 3 files changed, 172 insertions(+), 26 deletions(-) diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeservices/ZeBadgeManager.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeservices/ZeBadgeManager.kt index ffc97d57..abc08b16 100644 --- a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeservices/ZeBadgeManager.kt +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeservices/ZeBadgeManager.kt @@ -30,8 +30,7 @@ class ZeBadgeManager @Inject constructor( .zipit() .base64() - val payload = BadgePayload( - type = "preview", + val payload = PreviewLoad( meta = "", payload = binaryPayload, ) @@ -52,8 +51,7 @@ class ZeBadgeManager @Inject constructor( .zipit() .base64() - val payload = BadgePayload( - type = "store", + val payload = StoreLoad( meta = name, payload = binaryPayload, ) @@ -67,8 +65,7 @@ class ZeBadgeManager @Inject constructor( * @param name a file name on the badge to be shown */ suspend fun showPage(name: String): Result { - val payload = BadgePayload( - type = "show", + val payload = ShowLoad( meta = name, payload = "", ) @@ -80,8 +77,7 @@ class ZeBadgeManager @Inject constructor( * Return the name of the pages stored on the badge. */ suspend fun requestPagesStored(): Result { - val payload = BadgePayload( - type = "list", + val payload = ListLoad( meta = "", payload = "", ) @@ -98,8 +94,7 @@ class ZeBadgeManager @Inject constructor( */ suspend fun listConfiguration(): Result> { badgeManager.sendPayload( - BadgePayload( - type = "config_load", + ConfigLoad( meta = "", payload = "", ), @@ -108,8 +103,7 @@ class ZeBadgeManager @Inject constructor( badgeManager.readResponse() delay(300) - val payload = BadgePayload( - type = "config_list", + val payload = ConfigListLoad( meta = "", payload = "", ) @@ -148,8 +142,7 @@ class ZeBadgeManager @Inject constructor( val config = detypedConfig.entries.joinToString(separator = " ") - val payload = BadgePayload( - type = "config_update", + val payload = ConfigUpdateLoad( meta = "", payload = config, ) @@ -159,8 +152,7 @@ class ZeBadgeManager @Inject constructor( delay(300) return if (badgeManager.sendPayload( - BadgePayload( - type = "config_save", + ConfigSaveLoad( meta = "", payload = "", ), diff --git a/zeapp/badge/src/commonMain/kotlin/de/berlindroid/zekompanion/BadgeManager.kt b/zeapp/badge/src/commonMain/kotlin/de/berlindroid/zekompanion/BadgeManager.kt index dee6fad2..626bac7a 100644 --- a/zeapp/badge/src/commonMain/kotlin/de/berlindroid/zekompanion/BadgeManager.kt +++ b/zeapp/badge/src/commonMain/kotlin/de/berlindroid/zekompanion/BadgeManager.kt @@ -7,11 +7,11 @@ package de.berlindroid.zekompanion * @param meta any meta information you want to receive back? * @param payload the payload of the command of type 'type'. */ -data class BadgePayload( - val debug: Boolean = false, +open class BadgePayload( + open val debug: Boolean = false, val type: String, - val meta: String, - val payload: String, + open val meta: String, + open val payload: String, ) { /** * Convert the payload to a format the badge understands @@ -19,6 +19,160 @@ data class BadgePayload( fun toBadgeCommand(): String = "${if (debug) "debug:" else ""}$type:$meta:${payload}" } +class HelpLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +): BadgePayload( + debug = debug, + type = "help", + meta = meta, + payload = payload, +) + +data class ReloadLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +): BadgePayload( + debug = debug, + type = "reload", + meta = meta, + payload = payload, +) + +data class ExitLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +): BadgePayload( + debug = debug, + type = "exit", + meta = meta, + payload = payload, +) + +data class TerminalLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +): BadgePayload( + debug = debug, + type = "terminal", + meta = meta, + payload = payload, +) + +data class RefreshLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +): BadgePayload( + debug = debug, + type = "refresh", + meta = meta, + payload = payload, +) + +data class ConfigSaveLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +): BadgePayload( + debug = debug, + type = "config_save", + meta = meta, + payload = payload, +) + +data class ConfigLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +) : BadgePayload( + debug = debug, + type = "config_load", + meta = meta, + payload = payload, +) + +data class ConfigUpdateLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +) : BadgePayload( + debug = debug, + type = "config_update", + meta = meta, + payload = payload, +) + +data class ConfigListLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +) : BadgePayload( + debug = debug, + type = "config_list", + meta = meta, + payload = payload, +) + +data class ShowLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +) : BadgePayload( + debug = debug, + type = "show", + meta = meta, + payload = payload, +) + +data class StoreLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +) : BadgePayload( + debug = debug, + type = "store", + meta = meta, + payload = payload, +) + +data class PreviewLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +): BadgePayload( + debug = debug, + type = "preview", + meta = meta, + payload = payload, +) + +data class ListLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +) : BadgePayload( + debug = debug, + type = "list", + meta = meta, + payload = payload, +) + +data class DeleteLoad( + override val debug: Boolean = false, + override val meta: String, + override val payload: String, +) : BadgePayload( + debug = debug, + type = "delete", + meta = meta, + payload = payload, +) + interface BadgeManager { companion object { const val DEVICE_PRODUCT_NAME = "Badger 2040" diff --git a/zeapp/terminal/src/main/kotlin/de/berlindroid/zekompanion/terminal/Main.kt b/zeapp/terminal/src/main/kotlin/de/berlindroid/zekompanion/terminal/Main.kt index 4a2ced47..38958140 100644 --- a/zeapp/terminal/src/main/kotlin/de/berlindroid/zekompanion/terminal/Main.kt +++ b/zeapp/terminal/src/main/kotlin/de/berlindroid/zekompanion/terminal/Main.kt @@ -14,6 +14,9 @@ import de.berlindroid.zekompanion.toBinary import de.berlindroid.zekompanion.zipit import de.berlindroid.zekompanion.BADGE_WIDTH import de.berlindroid.zekompanion.BADGE_HEIGHT +import de.berlindroid.zekompanion.DeleteLoad +import de.berlindroid.zekompanion.PreviewLoad +import de.berlindroid.zekompanion.StoreLoad import kotlinx.coroutines.runBlocking import java.awt.image.BufferedImage import java.awt.image.BufferedImage.TYPE_INT_RGB @@ -232,9 +235,8 @@ private fun resizeFluidImageCallback(size: String?): IntBuffer.(width: Int, heig private fun storeBufferOntoBadge(filename: String): IntBuffer.(width: Int, height: Int) -> IntBuffer = { _, _ -> - val payload = BadgePayload( + val payload = StoreLoad( debug = false, - type = "store", meta = filename, payload = toBinary().zipit().base64(), ) @@ -316,9 +318,8 @@ private fun rawCommand( } private fun deleteStoredImageOnBadge(filename: String?): StorageOperation = { - val payload = BadgePayload( + val payload = DeleteLoad( debug = false, - type = "delete", meta = filename ?: "", payload = "", ) @@ -340,9 +341,8 @@ private fun deleteStoredImageOnBadge(filename: String?): StorageOperation = { } private fun previewImageOnBadge(): IntBuffer.(width: Int, height: Int) -> IntBuffer = { _, _ -> - val payload = BadgePayload( + val payload = PreviewLoad( debug = false, - type = "preview", meta = "", payload = toBinary().zipit().base64(), ) From a2ef4dc3b86a9b79674e497583ff2c3ab30eca8b Mon Sep 17 00:00:00 2001 From: Vladimir Zdravkovic Date: Thu, 4 Jul 2024 15:29:38 +0200 Subject: [PATCH 2/3] fix: polishing it off --- .../zeapp/zeservices/ZeBadgeManager.kt | 34 ++------ .../berlindroid/zekompanion/BadgeManager.kt | 84 +++++++++---------- .../berlindroid/zekompanion/terminal/Main.kt | 14 ++-- 3 files changed, 56 insertions(+), 76 deletions(-) diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeservices/ZeBadgeManager.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeservices/ZeBadgeManager.kt index abc08b16..372b8406 100644 --- a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeservices/ZeBadgeManager.kt +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeservices/ZeBadgeManager.kt @@ -30,8 +30,7 @@ class ZeBadgeManager @Inject constructor( .zipit() .base64() - val payload = PreviewLoad( - meta = "", + val payload = PreviewCommand( payload = binaryPayload, ) @@ -51,7 +50,7 @@ class ZeBadgeManager @Inject constructor( .zipit() .base64() - val payload = StoreLoad( + val payload = StoreCommand( meta = name, payload = binaryPayload, ) @@ -65,10 +64,7 @@ class ZeBadgeManager @Inject constructor( * @param name a file name on the badge to be shown */ suspend fun showPage(name: String): Result { - val payload = ShowLoad( - meta = name, - payload = "", - ) + val payload = ShowCommand(meta = name) return badgeManager.sendPayload(payload) } @@ -77,11 +73,7 @@ class ZeBadgeManager @Inject constructor( * Return the name of the pages stored on the badge. */ suspend fun requestPagesStored(): Result { - val payload = ListLoad( - meta = "", - payload = "", - ) - + val payload = ListCommand() return if (badgeManager.sendPayload(payload).isSuccess) { badgeManager.readResponse() } else { @@ -94,19 +86,13 @@ class ZeBadgeManager @Inject constructor( */ suspend fun listConfiguration(): Result> { badgeManager.sendPayload( - ConfigLoad( - meta = "", - payload = "", - ), + ConfigCommand(), ) badgeManager.readResponse() delay(300) - val payload = ConfigListLoad( - meta = "", - payload = "", - ) + val payload = ConfigListCommand() if (badgeManager.sendPayload(payload).isSuccess) { val response = badgeManager.readResponse() @@ -142,8 +128,7 @@ class ZeBadgeManager @Inject constructor( val config = detypedConfig.entries.joinToString(separator = " ") - val payload = ConfigUpdateLoad( - meta = "", + val payload = ConfigUpdateCommand( payload = config, ) @@ -152,10 +137,7 @@ class ZeBadgeManager @Inject constructor( delay(300) return if (badgeManager.sendPayload( - ConfigSaveLoad( - meta = "", - payload = "", - ), + ConfigSaveCommand(), ).isSuccess ) { Result.success(true) diff --git a/zeapp/badge/src/commonMain/kotlin/de/berlindroid/zekompanion/BadgeManager.kt b/zeapp/badge/src/commonMain/kotlin/de/berlindroid/zekompanion/BadgeManager.kt index 626bac7a..58804d63 100644 --- a/zeapp/badge/src/commonMain/kotlin/de/berlindroid/zekompanion/BadgeManager.kt +++ b/zeapp/badge/src/commonMain/kotlin/de/berlindroid/zekompanion/BadgeManager.kt @@ -19,10 +19,10 @@ open class BadgePayload( fun toBadgeCommand(): String = "${if (debug) "debug:" else ""}$type:$meta:${payload}" } -class HelpLoad( +class HelpCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ): BadgePayload( debug = debug, type = "help", @@ -30,10 +30,10 @@ class HelpLoad( payload = payload, ) -data class ReloadLoad( +data class ReloadCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ): BadgePayload( debug = debug, type = "reload", @@ -41,10 +41,10 @@ data class ReloadLoad( payload = payload, ) -data class ExitLoad( +data class ExitCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ): BadgePayload( debug = debug, type = "exit", @@ -52,10 +52,10 @@ data class ExitLoad( payload = payload, ) -data class TerminalLoad( +data class TerminalCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ): BadgePayload( debug = debug, type = "terminal", @@ -63,10 +63,10 @@ data class TerminalLoad( payload = payload, ) -data class RefreshLoad( +data class RefreshCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ): BadgePayload( debug = debug, type = "refresh", @@ -74,10 +74,10 @@ data class RefreshLoad( payload = payload, ) -data class ConfigSaveLoad( +data class ConfigSaveCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ): BadgePayload( debug = debug, type = "config_save", @@ -85,10 +85,10 @@ data class ConfigSaveLoad( payload = payload, ) -data class ConfigLoad( +data class ConfigCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ) : BadgePayload( debug = debug, type = "config_load", @@ -96,10 +96,10 @@ data class ConfigLoad( payload = payload, ) -data class ConfigUpdateLoad( +data class ConfigUpdateCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ) : BadgePayload( debug = debug, type = "config_update", @@ -107,10 +107,10 @@ data class ConfigUpdateLoad( payload = payload, ) -data class ConfigListLoad( +data class ConfigListCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ) : BadgePayload( debug = debug, type = "config_list", @@ -118,10 +118,10 @@ data class ConfigListLoad( payload = payload, ) -data class ShowLoad( +data class ShowCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ) : BadgePayload( debug = debug, type = "show", @@ -129,10 +129,10 @@ data class ShowLoad( payload = payload, ) -data class StoreLoad( +data class StoreCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ) : BadgePayload( debug = debug, type = "store", @@ -140,10 +140,10 @@ data class StoreLoad( payload = payload, ) -data class PreviewLoad( +data class PreviewCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ): BadgePayload( debug = debug, type = "preview", @@ -151,10 +151,10 @@ data class PreviewLoad( payload = payload, ) -data class ListLoad( +data class ListCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ) : BadgePayload( debug = debug, type = "list", @@ -162,10 +162,10 @@ data class ListLoad( payload = payload, ) -data class DeleteLoad( +data class DeleteCommand( override val debug: Boolean = false, - override val meta: String, - override val payload: String, + override val meta: String = "", + override val payload: String = "", ) : BadgePayload( debug = debug, type = "delete", diff --git a/zeapp/terminal/src/main/kotlin/de/berlindroid/zekompanion/terminal/Main.kt b/zeapp/terminal/src/main/kotlin/de/berlindroid/zekompanion/terminal/Main.kt index 38958140..6cf0dbb6 100644 --- a/zeapp/terminal/src/main/kotlin/de/berlindroid/zekompanion/terminal/Main.kt +++ b/zeapp/terminal/src/main/kotlin/de/berlindroid/zekompanion/terminal/Main.kt @@ -14,9 +14,9 @@ import de.berlindroid.zekompanion.toBinary import de.berlindroid.zekompanion.zipit import de.berlindroid.zekompanion.BADGE_WIDTH import de.berlindroid.zekompanion.BADGE_HEIGHT -import de.berlindroid.zekompanion.DeleteLoad -import de.berlindroid.zekompanion.PreviewLoad -import de.berlindroid.zekompanion.StoreLoad +import de.berlindroid.zekompanion.DeleteCommand +import de.berlindroid.zekompanion.PreviewCommand +import de.berlindroid.zekompanion.StoreCommand import kotlinx.coroutines.runBlocking import java.awt.image.BufferedImage import java.awt.image.BufferedImage.TYPE_INT_RGB @@ -235,7 +235,7 @@ private fun resizeFluidImageCallback(size: String?): IntBuffer.(width: Int, heig private fun storeBufferOntoBadge(filename: String): IntBuffer.(width: Int, height: Int) -> IntBuffer = { _, _ -> - val payload = StoreLoad( + val payload = StoreCommand( debug = false, meta = filename, payload = toBinary().zipit().base64(), @@ -318,10 +318,9 @@ private fun rawCommand( } private fun deleteStoredImageOnBadge(filename: String?): StorageOperation = { - val payload = DeleteLoad( + val payload = DeleteCommand( debug = false, meta = filename ?: "", - payload = "", ) runBlocking { @@ -341,9 +340,8 @@ private fun deleteStoredImageOnBadge(filename: String?): StorageOperation = { } private fun previewImageOnBadge(): IntBuffer.(width: Int, height: Int) -> IntBuffer = { _, _ -> - val payload = PreviewLoad( + val payload = PreviewCommand( debug = false, - meta = "", payload = toBinary().zipit().base64(), ) From 5bf442636c7da3ae1a64698b225641d9fc44474e Mon Sep 17 00:00:00 2001 From: Vladimir Zdravkovic Date: Fri, 5 Jul 2024 15:13:08 +0200 Subject: [PATCH 3/3] chore: fixed some linting errors --- .../zeapp/zeservices/ZeBadgeManager.kt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeservices/ZeBadgeManager.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeservices/ZeBadgeManager.kt index 372b8406..0ff495d4 100644 --- a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeservices/ZeBadgeManager.kt +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeservices/ZeBadgeManager.kt @@ -4,7 +4,19 @@ import android.content.Context import android.graphics.Bitmap import dagger.hilt.android.qualifiers.ApplicationContext import de.berlindroid.zeapp.zeui.pixelBuffer -import de.berlindroid.zekompanion.* +import de.berlindroid.zekompanion.ConfigCommand +import de.berlindroid.zekompanion.ConfigListCommand +import de.berlindroid.zekompanion.ConfigSaveCommand +import de.berlindroid.zekompanion.ConfigUpdateCommand +import de.berlindroid.zekompanion.Environment +import de.berlindroid.zekompanion.ListCommand +import de.berlindroid.zekompanion.PreviewCommand +import de.berlindroid.zekompanion.ShowCommand +import de.berlindroid.zekompanion.StoreCommand +import de.berlindroid.zekompanion.base64 +import de.berlindroid.zekompanion.buildBadgeManager +import de.berlindroid.zekompanion.toBinary +import de.berlindroid.zekompanion.zipit import kotlinx.coroutines.delay import timber.log.Timber import javax.inject.Inject @@ -102,7 +114,7 @@ class ZeBadgeManager @Inject constructor( val config = response.getOrDefault("").replace("\r\n", "") Timber.v( "Badge sent response: successfully received configuration: " + - "'${config.replace("\n", "\\n")}'.", + "'${config.replace("\n", "\\n")}'.", ) val parseResult = badgeConfigParser.parse(config) @@ -120,7 +132,6 @@ class ZeBadgeManager @Inject constructor( * Update configuration on badge.. */ suspend fun updateConfiguration(configuration: Map): Result { - val detypedConfig: Map = configuration.map { e -> val (k, v) = e k to kotlinToPython(v)