From d94a49d8413c00cd12380af2cbd3b0c70c4b7609 Mon Sep 17 00:00:00 2001
From: Harpo Roeder <roederharpo@protonmail.ch>
Date: Wed, 12 Jul 2023 16:39:44 -0500
Subject: [PATCH] update getQueryIndex and add getQueryLatest

---
 .../com/futo/polycentric/core/ApiMethods.kt   | 33 +++++++++++++++----
 1 file changed, 26 insertions(+), 7 deletions(-)

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 d56b13e..f6ad72f 100644
--- a/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt
+++ b/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt
@@ -77,15 +77,15 @@ class ApiMethods {
             return Protocol.Events.parseFrom(result.get())
         }
 
-        fun getQueryIndex(server: String, system: Protocol.PublicKey, eventTypes: List<Long>, limit: Int? = null): Protocol.Events {
+        fun getQueryIndex(server: String, system: Protocol.PublicKey, contentType: Long, after: Int? = null, limit: Int? = null): Protocol.QueryIndexResponse {
             val systemQuery = system.toByteArray().toBase64Url()
-            val eventTypesQuery = Protocol.RepeatedUInt64.newBuilder()
-                .addAllNumbers(eventTypes).build().toByteArray().toBase64Url()
 
-            val path = if (limit != null) {
-                "/query_index?system=$systemQuery&event_types=$eventTypesQuery&limit=$limit"
+            val path = if (after != null && limit != null) {
+                "/query_index?system=$systemQuery&content_type=$contentType&after=$after&limit=$limit"
+            } else if (limit != null) {
+                "/query_index?system=$systemQuery&content_type=$contentType&limit=$limit"
             } else {
-                "/query_index?system=$systemQuery&event_types=$eventTypesQuery"
+                "/query_index?system=$systemQuery&content_type=$contentType"
             }
             val (_, response, result) = "$server$path".httpGet()
                 .header(Headers.CONTENT_TYPE, "application/octet-stream")
@@ -96,6 +96,25 @@ class ApiMethods {
                 throw Exception(formattedMessage)
             }
 
+            return Protocol.QueryIndexResponse.parseFrom(result.get())
+        }
+
+        fun getQueryLatest(server: String, system: Protocol.PublicKey, eventTypes: List<Long>): Protocol.Events {
+            val systemQuery = system.toByteArray().toBase64Url()
+            val eventTypesQuery = Protocol.RepeatedUInt64.newBuilder()
+                .addAllNumbers(eventTypes).build().toByteArray().toBase64Url()
+
+            val path = "/query_latest?system=$systemQuery&event_types=$eventTypesQuery";
+
+            val (_, response, result) = "$server$path".httpGet()
+                .header(Headers.CONTENT_TYPE, "application/octet-stream")
+                .response()
+
+            if (!response.isSuccessful) {
+                val formattedMessage = "getQueryLatest to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}"
+                throw Exception(formattedMessage)
+            }
+
             return Protocol.Events.parseFrom(result.get())
         }
 
@@ -125,4 +144,4 @@ class ApiMethods {
             return Protocol.QueryReferencesResponse.parseFrom(result.get())
         }
     }
-}
\ No newline at end of file
+}
-- 
GitLab