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