From 828697a7f70c45c53aee8e21bc8b69afcb59bac2 Mon Sep 17 00:00:00 2001
From: Koen <koen@pop-os.localdomain>
Date: Fri, 4 Aug 2023 09:23:48 +0200
Subject: [PATCH] Added URLInfoDataLink

---
 .../polycentric/core/ProcessHandleTests.kt    |  3 ++-
 .../futo/polycentric/core/ProcessHandle.kt    | 10 ++++-----
 .../java/com/futo/polycentric/core/Utility.kt | 21 +++++++++++--------
 3 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/app/src/androidTest/java/com/futo/polycentric/core/ProcessHandleTests.kt b/app/src/androidTest/java/com/futo/polycentric/core/ProcessHandleTests.kt
index f4ac12d..683f585 100644
--- a/app/src/androidTest/java/com/futo/polycentric/core/ProcessHandleTests.kt
+++ b/app/src/androidTest/java/com/futo/polycentric/core/ProcessHandleTests.kt
@@ -143,7 +143,8 @@ class ProcessHandleTests {
             assertEquals(imageBytes.size.toLong(), imageManifest.byteCount)
             assertEquals(processHandle.processSecret.process.toProto(), imageManifest.process)
 
-            val imageData = processHandle.loadImageFromServer(imageManifest)
+            val bytes = processHandle.loadDataFromServer(imageManifest.toURLInfoDataLink(processHandle.system.toProto(), processHandle.processSecret.process.toProto(), listOf(TestConstants.SERVER)))
+            val imageData = ImageData(imageManifest.mime, imageManifest.width.toInt(), imageManifest.height.toInt(), bytes)
             assertEquals(imageManifest.byteCount.toInt(), imageData.data.size)
             assertArrayEquals(imageBytes, imageData.data)
         }
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 82b4b7b..053e692 100644
--- a/app/src/main/java/com/futo/polycentric/core/ProcessHandle.kt
+++ b/app/src/main/java/com/futo/polycentric/core/ProcessHandle.kt
@@ -208,21 +208,21 @@ class ProcessHandle constructor(
         return setAvatar(imageBundleBuilder.build())
     }
 
-    fun loadImageFromServer(imageManifest: Protocol.ImageManifest): ImageData {
+    fun loadDataFromServer(dataLink: Protocol.URLInfoDataLink): ByteArray {
         val systemState = SystemState.fromStorageTypeSystemState(Store.instance.getSystemState(system))
         val server = systemState.servers.first() //TODO: Somehow use all servers?
 
         val blobProcessRangesToGet = Protocol.RangesForProcess.newBuilder()
-            .addAllRanges(imageManifest.sectionsList)
+            .addAllRanges(dataLink.sectionsList)
             .setProcess(processSecret.process.toProto())
             .build()
         val blobEvents = ApiMethods.getEvents(server, system.toProto(), Protocol.RangesForSystem.newBuilder()
             .addRangesForProcesses(blobProcessRangesToGet).build()).eventsList.map { SignedEvent.fromProto(it) }
 
-        val totalArray = ByteArray(imageManifest.byteCount.toInt())
+        val totalArray = ByteArray(dataLink.byteCount.toInt())
         var offset = 0
 
-        for (section in imageManifest.sectionsList) {
+        for (section in dataLink.sectionsList) {
             val sectionEvents = blobEvents.filter { it.event.logicalClock >= section.low && it.event.logicalClock <= section.high }.sortedBy { it.event.logicalClock }
             sectionEvents.forEach {
                 val blobSection = it.event.content
@@ -232,7 +232,7 @@ class ProcessHandle constructor(
             }
         }
 
-        return ImageData(imageManifest.mime, imageManifest.width.toInt(), imageManifest.height.toInt(), totalArray)
+        return totalArray
     }
 
     private fun publish(contentType: Long, content: ByteArray, lwwElementSet: LWWElementSet?, lwwElement: LWWElement?, references: MutableList<Protocol.Reference>): Pointer {
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 34d6b60..3832cfc 100644
--- a/app/src/main/java/com/futo/polycentric/core/Utility.kt
+++ b/app/src/main/java/com/futo/polycentric/core/Utility.kt
@@ -132,18 +132,21 @@ fun combineHashCodes(hashCodes: List<Int?>): Int {
     return result
 }
 
+fun Protocol.ImageManifest.toURLInfoDataLink(system: Protocol.PublicKey, process: Protocol.Process, servers: Iterable<String>): Protocol.URLInfoDataLink {
+    return Protocol.URLInfoDataLink.newBuilder()
+        .setSystem(system)
+        .setProcess(process)
+        .addAllServers(servers)
+        .setByteCount(byteCount)
+        .addAllSections(sectionsList)
+        .setMime(mime)
+        .build();
+}
+
 fun Protocol.ImageManifest.toURLInfoSystemLinkUrl(system: Protocol.PublicKey, process: Protocol.Process, servers: Iterable<String>): String {
     val urlInfo = Protocol.URLInfo.newBuilder()
         .setUrlType(4)
-        .setBody(Protocol.URLInfoDataLink.newBuilder()
-            .setSystem(system)
-            .setProcess(process)
-            .addAllServers(servers)
-            .setByteCount(byteCount)
-            .addAllSections(sectionsList)
-            .setMime(mime)
-            .build()
-            .toByteString())
+        .setBody(toURLInfoDataLink(system, process, servers).toByteString())
         .build();
 
     return "polycentric://" + urlInfo.toByteArray().toBase64Url()
-- 
GitLab