From 53fa134689b9d920371c6cfb89f12d88195f66f5 Mon Sep 17 00:00:00 2001 From: Koen <koen@pop-os.localdomain> Date: Fri, 4 Aug 2023 09:15:30 +0200 Subject: [PATCH] Implemented U --- .../futo/polycentric/core/ProcessHandle.kt | 10 ++++------ .../java/com/futo/polycentric/core/Utility.kt | 18 ++++++++++++++++++ .../futo/polycentric/protos/protocol.proto | 19 ++++++++++--------- 3 files changed, 32 insertions(+), 15 deletions(-) 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 3806975..82b4b7b 100644 --- a/app/src/main/java/com/futo/polycentric/core/ProcessHandle.kt +++ b/app/src/main/java/com/futo/polycentric/core/ProcessHandle.kt @@ -175,9 +175,7 @@ class ProcessHandle constructor( val bytesToUpload = content.sliceArray(IntRange(i, end)) val pointer = publish( ContentType.BLOB_SECTION.value, - Protocol.BlobSection.newBuilder() - .setContent(ByteString.copyFrom(bytesToUpload)) - .build().toByteArray(), + bytesToUpload, null, null, mutableListOf() @@ -227,9 +225,9 @@ class ProcessHandle constructor( for (section in imageManifest.sectionsList) { val sectionEvents = blobEvents.filter { it.event.logicalClock >= section.low && it.event.logicalClock <= section.high }.sortedBy { it.event.logicalClock } sectionEvents.forEach { - val blobSection = Protocol.BlobSection.parseFrom(it.event.content) - val size = blobSection.content.size() - blobSection.content.copyTo(totalArray, offset) + val blobSection = it.event.content + val size = blobSection.size + blobSection.copyInto(totalArray, offset) offset += size } } 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 e9895b3..34d6b60 100644 --- a/app/src/main/java/com/futo/polycentric/core/Utility.kt +++ b/app/src/main/java/com/futo/polycentric/core/Utility.kt @@ -2,6 +2,7 @@ package com.futo.polycentric.core import android.util.Base64 import com.futo.polycentric.core.serializers.ClaimSerializer +import com.google.protobuf.ByteString import kotlinx.serialization.Serializable import userpackage.Protocol import userpackage.Protocol.Claim @@ -129,4 +130,21 @@ fun combineHashCodes(hashCodes: List<Int?>): Int { result = 31 * result + (hashCode ?: 0) } return result +} + +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()) + .build(); + + return "polycentric://" + urlInfo.toByteArray().toBase64Url() } \ No newline at end of file diff --git a/app/src/main/proto/com/futo/polycentric/protos/protocol.proto b/app/src/main/proto/com/futo/polycentric/protos/protocol.proto index 214825d..85b0549 100644 --- a/app/src/main/proto/com/futo/polycentric/protos/protocol.proto +++ b/app/src/main/proto/com/futo/polycentric/protos/protocol.proto @@ -48,15 +48,6 @@ message Server { string server = 1; } -message BlobMeta { - uint64 section_count = 1; - string mime = 2; -} - -message BlobSection { - bytes content = 1; -} - message ImageManifest { string mime = 1; uint64 width = 2; @@ -263,6 +254,7 @@ message URLInfo { // url_type 1 = URLInfoSystemLink // url_type 2 = URLInfoEventLink // url_type 3 = ExportBundle + // url_type 4 = URLInfoDataLink uint64 url_type = 1; bytes body = 2; } @@ -278,3 +270,12 @@ message URLInfoEventLink { uint64 logical_clock = 3; repeated string servers = 4; } + +message URLInfoDataLink { + PublicKey system = 1; + Process process = 2; + repeated string servers = 3; + uint64 byte_count = 4; + repeated Range sections = 5; + optional string mime = 6; +} -- GitLab