Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: updated the commands to be typed instead of hardcoded strings #320

Merged
merged 6 commits into from
Jul 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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