Skip to content

Commit

Permalink
feat: updated the commands to be typed instead of hardcoded strings (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
alisen authored Jul 5, 2024
2 parents 5f2c8b5 + e2e8d4a commit 8d03b10
Show file tree
Hide file tree
Showing 3 changed files with 189 additions and 85 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,15 @@ import android.content.Context
import android.graphics.Bitmap
import dagger.hilt.android.qualifiers.ApplicationContext
import de.berlindroid.zeapp.zeui.pixelBuffer
import de.berlindroid.zekompanion.BadgePayload
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
Expand Down Expand Up @@ -35,7 +42,7 @@ class ZeBadgeManager @Inject constructor(
.zipit()
.base64()

val payload = BadgePayload.PreviewPayload(
val payload = PreviewCommand(
payload = binaryPayload,
)

Expand All @@ -55,8 +62,8 @@ class ZeBadgeManager @Inject constructor(
.zipit()
.base64()

val payload = BadgePayload.StorePayload(
filename = name,
val payload = StoreCommand(
meta = name,
payload = binaryPayload,
)

Expand All @@ -69,9 +76,7 @@ class ZeBadgeManager @Inject constructor(
* @param name a file name on the badge to be shown
*/
suspend fun showPage(name: String): Result<Int> {
val payload = BadgePayload.ShowPayload(
filename = name,
)
val payload = ShowCommand(meta = name)

return badgeManager.sendPayload(payload)
}
Expand All @@ -80,8 +85,7 @@ class ZeBadgeManager @Inject constructor(
* Return the name of the pages stored on the badge.
*/
suspend fun requestPagesStored(): Result<String> {
val payload = BadgePayload.ListPayload()

val payload = ListCommand()
return if (badgeManager.sendPayload(payload).isSuccess) {
badgeManager.readResponse()
} else {
Expand All @@ -94,13 +98,13 @@ class ZeBadgeManager @Inject constructor(
*/
suspend fun listConfiguration(): Result<Map<String, Any?>> {
badgeManager.sendPayload(
BadgePayload.ConfigLoadPayload(),
ConfigCommand(),
)

badgeManager.readResponse()
delay(300)

val payload = BadgePayload.ConfigListPayload()
val payload = ConfigListCommand()

if (badgeManager.sendPayload(payload).isSuccess) {
val response = badgeManager.readResponse()
Expand Down Expand Up @@ -135,16 +139,16 @@ class ZeBadgeManager @Inject constructor(

val config = detypedConfig.entries.joinToString(separator = " ")

val payload = BadgePayload.ConfigUpdatePayload(
config = config,
val payload = ConfigUpdateCommand(
payload = config,
)

if (badgeManager.sendPayload(payload).isSuccess) {
badgeManager.readResponse()
delay(300)

return if (badgeManager.sendPayload(
BadgePayload.ConfigSavePayload(),
ConfigSaveCommand(),
).isSuccess
) {
Result.success(true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,78 +7,172 @@ package de.berlindroid.zekompanion
* @param meta any meta information you want to receive back?
* @param payload the payload of the command of type 'type'.
*/
sealed class BadgePayload(
val debug: Boolean,
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
*/
fun toBadgeCommand(): String = "${if (debug) "debug:" else ""}$type:$meta:${payload}"

class RawPayload(debug: Boolean = false, type: String, meta: String, payload: String) : BadgePayload(
debug, type, meta, payload,
)

class HelpPayload(debug: Boolean = false) : BadgePayload(
debug, type = "help", meta = "", payload = "",
)

class ReloadPayload(debug: Boolean = false) : BadgePayload(
debug, type = "reload", meta = "", payload = "",
)

class ExitPayload(debug: Boolean = false) : BadgePayload(
debug, type = "exit", meta = "", payload = "",
)

class TerminalPayload(debug: Boolean = false) : BadgePayload(
debug, type = "terminal", meta = "", payload = "",
)

class RefreshPayload(debug: Boolean = false) : BadgePayload(
debug, type = "refresh", meta = "", payload = "",
)

class ConfigSavePayload(debug: Boolean = false) : BadgePayload(
debug, type = "config_save", meta = "", payload = "",
)

class ConfigLoadPayload(debug: Boolean = false) : BadgePayload(
debug, type = "config_load", meta = "", payload = "",
)

class ConfigUpdatePayload(debug: Boolean = false, config: String) : BadgePayload(
debug, type = "config_update", meta = "", payload = config,
)

class ConfigListPayload(debug: Boolean = false) : BadgePayload(
debug, type = "config_list", meta = "", payload = "",
)

class ShowPayload(debug: Boolean = false, filename: String) : BadgePayload(
debug, type = "show", meta = filename, payload = "",
)

class StorePayload(debug: Boolean = false, filename: String, payload: String) : BadgePayload(
debug, type = "store", meta = filename, payload = payload,
)

class PreviewPayload(debug: Boolean = false, payload: String) : BadgePayload(
debug, type = "preview", meta = "", payload = payload,
)

class ListPayload(debug: Boolean = false) : BadgePayload(
debug, type = "list", meta = "", payload = "",
)

class DeletePayload(debug: Boolean = false, filename: String) : BadgePayload(
debug, type = "delete", meta = filename, payload = "",
)
}

class HelpCommand(
override val debug: Boolean = false,
override val meta: String = "",
override val payload: String = "",
): BadgePayload(
debug = debug,
type = "help",
meta = meta,
payload = payload,
)

data class ReloadCommand(
override val debug: Boolean = false,
override val meta: String = "",
override val payload: String = "",
): BadgePayload(
debug = debug,
type = "reload",
meta = meta,
payload = payload,
)

data class ExitCommand(
override val debug: Boolean = false,
override val meta: String = "",
override val payload: String = "",
): BadgePayload(
debug = debug,
type = "exit",
meta = meta,
payload = payload,
)

data class TerminalCommand(
override val debug: Boolean = false,
override val meta: String = "",
override val payload: String = "",
): BadgePayload(
debug = debug,
type = "terminal",
meta = meta,
payload = payload,
)

data class RefreshCommand(
override val debug: Boolean = false,
override val meta: String = "",
override val payload: String = "",
): BadgePayload(
debug = debug,
type = "refresh",
meta = meta,
payload = payload,
)

data class ConfigSaveCommand(
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 ConfigCommand(
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 ConfigUpdateCommand(
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 ConfigListCommand(
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 ShowCommand(
override val debug: Boolean = false,
override val meta: String = "",
override val payload: String = "",
) : BadgePayload(
debug = debug,
type = "show",
meta = meta,
payload = payload,
)

data class StoreCommand(
override val debug: Boolean = false,
override val meta: String = "",
override val payload: String = "",
) : BadgePayload(
debug = debug,
type = "store",
meta = meta,
payload = payload,
)

data class PreviewCommand(
override val debug: Boolean = false,
override val meta: String = "",
override val payload: String = "",
): BadgePayload(
debug = debug,
type = "preview",
meta = meta,
payload = payload,
)

data class ListCommand(
override val debug: Boolean = false,
override val meta: String = "",
override val payload: String = "",
) : BadgePayload(
debug = debug,
type = "list",
meta = meta,
payload = payload,
)

data class DeleteCommand(
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"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.berlindroid.zekompanion.terminal

import de.berlindroid.zekompanion.BadgePayload
import de.berlindroid.zekompanion.base64
import de.berlindroid.zekompanion.buildBadgeManager
import de.berlindroid.zekompanion.ditherFloydSteinberg
Expand All @@ -13,7 +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.BadgePayload.*
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
Expand Down Expand Up @@ -232,8 +235,9 @@ private fun resizeFluidImageCallback(size: String?): IntBuffer.(width: Int, heig


private fun storeBufferOntoBadge(filename: String): IntBuffer.(width: Int, height: Int) -> IntBuffer = { _, _ ->
val payload = StorePayload(
filename = filename,
val payload = StoreCommand(
debug = false,
meta = filename,
payload = toBinary().zipit().base64(),
)

Expand Down Expand Up @@ -280,7 +284,7 @@ private fun rawCommand(
command: String, meta: String = "", payload: String = "",
resultTransformer: (result: Result<String>) -> String = ::defaultTransformer,
) {
val badgePayload = RawPayload(
val badgePayload = BadgePayload(
debug = false,
type = command,
meta = meta,
Expand Down Expand Up @@ -314,8 +318,9 @@ private fun rawCommand(
}

private fun deleteStoredImageOnBadge(filename: String?): StorageOperation = {
val payload = DeletePayload(
filename = filename ?: ""
val payload = DeleteCommand(
debug = false,
meta = filename ?: "",
)

runBlocking {
Expand All @@ -335,7 +340,8 @@ private fun deleteStoredImageOnBadge(filename: String?): StorageOperation = {
}

private fun previewImageOnBadge(): IntBuffer.(width: Int, height: Int) -> IntBuffer = { _, _ ->
val payload = PreviewPayload(
val payload = PreviewCommand(
debug = false,
payload = toBinary().zipit().base64(),
)

Expand Down

0 comments on commit 8d03b10

Please sign in to comment.