From f9bde9bdc07defa302de8e2a42c81c5731494d9c Mon Sep 17 00:00:00 2001 From: Harpo Roeder <roederharpo@protonmail.ch> Date: Wed, 23 Aug 2023 14:55:04 -0500 Subject: [PATCH] add authority event --- .../java/com/futo/polycentric/core/Models.kt | 4 +- .../futo/polycentric/core/ProcessHandle.kt | 59 ++++++++++++------- .../com/futo/polycentric/core/SystemState.kt | 19 +++++- 3 files changed, 57 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/futo/polycentric/core/Models.kt b/app/src/main/java/com/futo/polycentric/core/Models.kt index 91d8ec5..97d2793 100644 --- a/app/src/main/java/com/futo/polycentric/core/Models.kt +++ b/app/src/main/java/com/futo/polycentric/core/Models.kt @@ -21,7 +21,8 @@ enum class ContentType(val value: Long) { CLAIM(12), BANNER(13), OPINION(14), - STORE(15) + STORE(15), + AUTHORITY(16) } enum class ClaimType(val value: Long) { @@ -52,7 +53,6 @@ enum class ClaimType(val value: Long) { POLYCENTRIC(25) } - class Blob(val mime: String, val content: ByteArray) { } @Serializable class Digest(val digestType: Long, @Serializable(with = ByteArraySerializer::class) val digest: ByteArray) { diff --git a/app/src/main/java/com/futo/polycentric/core/ProcessHandle.kt b/app/src/main/java/com/futo/polycentric/core/ProcessHandle.kt index 510343d..a651c59 100644 --- a/app/src/main/java/com/futo/polycentric/core/ProcessHandle.kt +++ b/app/src/main/java/com/futo/polycentric/core/ProcessHandle.kt @@ -56,6 +56,21 @@ class ProcessHandle constructor( ) } + fun setCRDTElementSetItem(contentType: Long, value: ByteArray, operation: LWWElementSetOperation): Pointer { + return publish( + contentType, + ByteArray(0), + LWWElementSet( + operation, + value, + Date().time + ), + null, + mutableListOf() + ) + + } + fun setUsername(username: String): Pointer { return setCRDTItem( ContentType.USERNAME.value, @@ -92,31 +107,35 @@ class ProcessHandle constructor( } fun addServer(server: String): Pointer { - return publish( + return setCRDTElementSetItem( ContentType.SERVER.value, - ByteArray(0), - LWWElementSet( - LWWElementSetOperation.ADD, - server.toByteArray(), - Date().time - ), - null, - mutableListOf() - ) + server.toByteArray(), + LWWElementSetOperation.ADD + ); } fun removeServer(server: String): Pointer { - return publish( + return setCRDTElementSetItem( ContentType.SERVER.value, - ByteArray(0), - LWWElementSet( - LWWElementSetOperation.REMOVE, - server.toByteArray(), - Date().time - ), - null, - mutableListOf() - ) + server.toByteArray(), + LWWElementSetOperation.REMOVE + ); + } + + fun addAuthority(server: String): Pointer { + return setCRDTElementSetItem( + ContentType.AUTHORITY.value, + server.toByteArray(), + LWWElementSetOperation.ADD + ); + } + + fun removeAuthority(server: String): Pointer { + return setCRDTElementSetItem( + ContentType.AUTHORITY.value, + server.toByteArray(), + LWWElementSetOperation.REMOVE + ); } fun vouch(pointer: Pointer): Pointer { diff --git a/app/src/main/java/com/futo/polycentric/core/SystemState.kt b/app/src/main/java/com/futo/polycentric/core/SystemState.kt index 33a9bbe..27353c6 100644 --- a/app/src/main/java/com/futo/polycentric/core/SystemState.kt +++ b/app/src/main/java/com/futo/polycentric/core/SystemState.kt @@ -7,6 +7,7 @@ import userpackage.Protocol @Serializable class SystemState( val servers: Array<String>, + val authorities: Array<String>, val processes: Array<Process>, val username: String, val description: String, @@ -21,8 +22,20 @@ class SystemState( companion object { fun fromStorageTypeSystemState(proto: StorageTypeSystemState): SystemState { val servers = mutableListOf<String>() - proto.crdtSetItems.filter { item -> item.contentType == ContentType.SERVER.value && item.operation == LWWElementSetOperation.ADD } - .forEach { servers.add(it.value.decodeToString()) } + val authorities = mutableListOf<String>() + + proto.crdtSetItems.forEach { item -> + if (item.operation == LWWElementSetOperation.ADD) { + when (item.contentType) { + ContentType.SERVER.value -> { + servers.add(item.value.decodeToString()) + } + ContentType.AUTHORITY.value -> { + authorities.add(item.value.decodeToString()) + } + } + } + } val processes = mutableListOf<Process>() proto.processes.forEach { processes.add(it) } @@ -52,7 +65,7 @@ class SystemState( } } - return SystemState(servers.toTypedArray(), processes.toTypedArray(), username, description, store, avatar, banner) + return SystemState(servers.toTypedArray(), authorities.toTypedArray(), processes.toTypedArray(), username, description, store, avatar, banner) } } } -- GitLab