From 3fe81ffb3c730f0dc9f645149dc20c31284cd790 Mon Sep 17 00:00:00 2001
From: Koen <koen@pop-os.localdomain>
Date: Fri, 3 Nov 2023 17:30:34 +0100
Subject: [PATCH] Added new properties.

---
 .../java/com/futo/polycentric/core/Models.kt  |  7 ++++-
 .../com/futo/polycentric/core/SystemState.kt  | 31 ++++++++++++++++++-
 .../java/com/futo/polycentric/core/Utility.kt |  7 +----
 3 files changed, 37 insertions(+), 8 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 97d2793..4cb2620 100644
--- a/app/src/main/java/com/futo/polycentric/core/Models.kt
+++ b/app/src/main/java/com/futo/polycentric/core/Models.kt
@@ -22,7 +22,12 @@ enum class ContentType(val value: Long) {
     BANNER(13),
     OPINION(14),
     STORE(15),
-    AUTHORITY(16)
+    AUTHORITY(16),
+    STORE_DATA(17),
+    PROMOTION_BANNER(18),
+    PROMOTION(19),
+    MEMBERSHIP_URLS(20),
+    DONATION_DESTINATIONS(21)
 }
 
 enum class ClaimType(val value: Long) {
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 27353c6..c9f5351 100644
--- a/app/src/main/java/com/futo/polycentric/core/SystemState.kt
+++ b/app/src/main/java/com/futo/polycentric/core/SystemState.kt
@@ -2,6 +2,8 @@ package com.futo.polycentric.core
 
 import com.futo.polycentric.core.serializers.ImageBundleSerializer
 import kotlinx.serialization.Serializable
+import kotlinx.serialization.decodeFromString
+import kotlinx.serialization.json.Json
 import userpackage.Protocol
 
 @Serializable
@@ -14,6 +16,11 @@ class SystemState(
     val store: String,
     @Serializable(with = ImageBundleSerializer::class) val avatar: Protocol.ImageBundle?,
     @Serializable(with = ImageBundleSerializer::class) val banner: Protocol.ImageBundle?,
+    var storeData: String,
+    var promotion: String,
+    var membershipUrls: List<String>,
+    var donationDestinations: List<String>,
+    @Serializable(with = ImageBundleSerializer::class) val promotionBanner: Protocol.ImageBundle?,
 ) {
     override fun toString(): String {
         return "(servers: $servers, processes: $processes, username: $username, description: $description, store: $store, avatar: $avatar, banner: $banner)"
@@ -43,6 +50,11 @@ class SystemState(
             var username = ""
             var description = ""
             var store = ""
+            var storeData = ""
+            var promotion = ""
+            var membershipUrls: List<String> = listOf()
+            var donationDestinations: List<String> = listOf()
+            var promotionBanner: Protocol.ImageBundle? = null
             var avatar: Protocol.ImageBundle? = null
             var banner: Protocol.ImageBundle? = null
             proto.crdtItems.forEach { item ->
@@ -62,10 +74,27 @@ class SystemState(
                     ContentType.BANNER.value -> {
                         banner = Protocol.ImageBundle.parseFrom(item.value)
                     }
+                    ContentType.STORE_DATA.value -> {
+                        storeData = item.value.decodeToString()
+                    }
+                    ContentType.PROMOTION_BANNER.value -> {
+                        promotionBanner = Protocol.ImageBundle.parseFrom(item.value)
+                    }
+                    ContentType.PROMOTION.value -> {
+                        promotion = item.value.decodeToString()
+                    }
+                    ContentType.MEMBERSHIP_URLS.value -> {
+                        val json = item.value.decodeToString()
+                        membershipUrls = Json.decodeFromString(json)
+                    }
+                    ContentType.DONATION_DESTINATIONS.value -> {
+                        val json = item.value.decodeToString()
+                        donationDestinations = Json.decodeFromString(json)
+                    }
                 }
             }
 
-            return SystemState(servers.toTypedArray(), authorities.toTypedArray(), processes.toTypedArray(), username, description, store, avatar, banner)
+            return SystemState(servers.toTypedArray(), authorities.toTypedArray(), processes.toTypedArray(), username, description, store, avatar, banner, storeData, promotion, membershipUrls, donationDestinations, promotionBanner)
         }
     }
 }
diff --git a/app/src/main/java/com/futo/polycentric/core/Utility.kt b/app/src/main/java/com/futo/polycentric/core/Utility.kt
index 1dafe61..ac6d91d 100644
--- a/app/src/main/java/com/futo/polycentric/core/Utility.kt
+++ b/app/src/main/java/com/futo/polycentric/core/Utility.kt
@@ -130,12 +130,7 @@ fun Protocol.ImageManifest.toURLInfoDataLink(system: Protocol.PublicKey, process
 }
 
 fun Protocol.ImageManifest.toURLInfoSystemLinkUrl(processHandle: ProcessHandle, servers: Iterable<String>): String {
-    val urlInfo = Protocol.URLInfo.newBuilder()
-        .setUrlType(4)
-        .setBody(toURLInfoDataLink(processHandle.system.toProto(), processHandle.processSecret.process.toProto(), servers).toByteString())
-        .build()
-
-    return "polycentric://" + urlInfo.toByteArray().toBase64Url()
+    return toURLInfoSystemLinkUrl(processHandle.system.toProto(), processHandle.processSecret.process.toProto(), servers)
 }
 
 fun Protocol.ImageManifest.toURLInfoSystemLinkUrl(system: Protocol.PublicKey, process: Protocol.Process, servers: Iterable<String>): String {
-- 
GitLab