diff --git a/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt b/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt index 4755868df14e1fb8daf38e5a8a7637d20d28f358..b818b22e588f35a85b1980c61308985d56042881 100644 --- a/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt +++ b/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt @@ -13,6 +13,8 @@ import userpackage.Protocol //TODO: The protobuf requirements here results in lots of memory being copied, can it be avoided? class ApiMethods { companion object { + private const val TAG = "ApiMethods" + fun postEvents(server: String, events: Protocol.Events) { val (_, response, result) = "$server/events".httpPost() .header(Headers.CONTENT_TYPE, "application/octet-stream") @@ -20,7 +22,7 @@ class ApiMethods { .response() if (!response.isSuccessful) { - val formattedMessage = "Posting events to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" + val formattedMessage = "postEvents to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" throw Exception(formattedMessage) } } @@ -28,14 +30,14 @@ class ApiMethods { fun getRanges(server: String, system: Protocol.PublicKey): Protocol.RangesForSystem { val systemQuery = encode(system.toByteArray()) val path = "/ranges?system=$systemQuery" - Log.i("TEST", "$server$path") val (_, response, result) = "$server$path".httpGet() .header(Headers.CONTENT_TYPE, "application/octet-stream").response() - Log.i("TEST", "Response $response") + Log.i(TAG, "getRanges $path") + if (!response.isSuccessful) { - val errorMessage = result.fold({ it.decodeToString() }, { "getRanges !ok" }) - throw Exception(errorMessage) + val formattedMessage = "getRanges to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" + throw Exception(formattedMessage) } return Protocol.RangesForSystem.parseFrom(result.get()) @@ -51,8 +53,8 @@ class ApiMethods { .response() if (!response.isSuccessful) { - val errorMessage = result.fold({ it.decodeToString() }, { "getEvents !ok" }) - throw Exception(errorMessage) + val formattedMessage = "getEvents to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" + throw Exception(formattedMessage) } return Protocol.Events.parseFrom(result.get()) @@ -68,8 +70,8 @@ class ApiMethods { .response() if (!response.isSuccessful) { - val errorMessage = result.fold({ it.decodeToString() }, { "getResolveClaim !ok" }) - throw Exception(errorMessage) + val formattedMessage = "getResolveClaim to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" + throw Exception(formattedMessage) } return Protocol.Events.parseFrom(result.get()) @@ -90,8 +92,8 @@ class ApiMethods { .response() if (!response.isSuccessful) { - val errorMessage = result.fold({ it.decodeToString() }, { "getQueryIndex !ok" }) - throw Exception(errorMessage) + val formattedMessage = "getQueryIndex to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" + throw Exception(formattedMessage) } return Protocol.Events.parseFrom(result.get()) @@ -112,8 +114,8 @@ class ApiMethods { .response() if (!response.isSuccessful) { - val errorMessage = result.fold({ it.decodeToString() }, { "getQueryReferences !ok" }) - throw Exception(errorMessage) + val formattedMessage = "getQueryReferences to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" + throw Exception(formattedMessage) } return Protocol.QueryReferencesResponse.parseFrom(result.get()) diff --git a/app/src/main/java/com/futo/polycentric/core/SqlLiteStore.kt b/app/src/main/java/com/futo/polycentric/core/SqlLiteStore.kt index a2d63ac5a364af155e3f60abff0670a1d4b16104..59daa13d4db403072c1460fb2c5e699a725d3926 100644 --- a/app/src/main/java/com/futo/polycentric/core/SqlLiteStore.kt +++ b/app/src/main/java/com/futo/polycentric/core/SqlLiteStore.kt @@ -73,7 +73,12 @@ class SqlLiteStore(private val _db: SqlLiteDbHelper) : Store() { } if (value != null) { - return SignedEvent.fromProto(Protocol.SignedEvent.parseFrom(value)) + val storageTypeEvent = Protocol.StorageTypeEvent.parseFrom(value) + if (!storageTypeEvent.hasEvent()) { + return null + } + + return SignedEvent.fromProto(storageTypeEvent.event) } return null @@ -90,8 +95,12 @@ class SqlLiteStore(private val _db: SqlLiteDbHelper) : Store() { do { val value = it.getBlob(0); - val se = SignedEvent.fromProto(Protocol.SignedEvent.parseFrom(value)); - handler(se); + val storageTypeEvent = Protocol.StorageTypeEvent.parseFrom(value) + if (!storageTypeEvent.hasEvent()) { + continue + } + + handler(SignedEvent.fromProto(storageTypeEvent.event)); } while (it.moveToNext()); } } 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 4530b8d6a5e5eca3d66f7a340a81247c8f91fcb2..739628d0f1169ddf1e9fb0a44c9d01245e85080e 100644 --- a/app/src/main/proto/com/futo/polycentric/protos/protocol.proto +++ b/app/src/main/proto/com/futo/polycentric/protos/protocol.proto @@ -107,9 +107,22 @@ message RangesForSystem { } message URLInfo { + // url_type 1 = URLInfoSystemLink + // url_type 2 = URLInfoEventLink + // url_type 3 = ExportBundle + uint64 url_type = 1; + bytes body = 2; +} + +message URLInfoSystemLink { + PublicKey system = 1; + repeated string servers = 2; +} + +message URLInfoEventLink { PublicKey system = 1; - optional Process process = 2; - optional uint64 logical_clock = 3; + Process process = 2; + uint64 logical_clock = 3; repeated string servers = 4; }