From b8ba017291fa33dfcb6422532f1d16fdf4bd2c88 Mon Sep 17 00:00:00 2001 From: 0xf4b1 <10889432+0xf4b1@users.noreply.github.com> Date: Sun, 24 Mar 2024 21:54:03 +0100 Subject: [PATCH] Avoid returning empty query results if end of stream is not reached. If the result of the current query is empty but next href exists perform next query instead. Otherwise, the empty result will be treated as end of stream. --- .../tiefensuche/soundcloud/api/Requests.kt | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/soundcloud/src/main/java/com/tiefensuche/soundcloud/api/Requests.kt b/soundcloud/src/main/java/com/tiefensuche/soundcloud/api/Requests.kt index cda8d42..86a3806 100644 --- a/soundcloud/src/main/java/com/tiefensuche/soundcloud/api/Requests.kt +++ b/soundcloud/src/main/java/com/tiefensuche/soundcloud/api/Requests.kt @@ -39,25 +39,28 @@ class Requests { if (!reset && url in session.nextQueryUrls) { session.nextQueryUrls[url]?.let { - if (it == JSON_NULL) { - return JSONArray() - } currentUrl = it } ?: return JSONArray() } - val response = request(currentUrl) - val json = JSONObject(response.value) - if (!json.isNull(NEXT_HREF)) { - session.nextQueryUrls[url] = json.getString(NEXT_HREF) - } else { - session.nextQueryUrls[url] = JSON_NULL - } + while (currentUrl != JSON_NULL) { + val response = request(currentUrl) + val json = JSONObject(response.value) + currentUrl = if (!json.isNull(NEXT_HREF)) { + json.getString(NEXT_HREF) + } else { + JSON_NULL + } + session.nextQueryUrls[url] = currentUrl - if (!json.has(COLLECTION)) { - return JSONArray() + if (!json.has(COLLECTION)) { + return JSONArray() + } + val collection = json.getJSONArray(COLLECTION) + if (collection.length() > 0) + return collection } - return json.getJSONArray(COLLECTION) + return JSONArray() } }