From 540e8a84662782f13cf3aaec13d89888f21bc4f2 Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Thu, 13 Dec 2018 16:15:08 +0100 Subject: [PATCH] Fix JSON parsing for CamSoda --- .../sites/camsoda/CamsodaUpdateService.java | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaUpdateService.java b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaUpdateService.java index 3e3ff047..75f827a6 100644 --- a/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaUpdateService.java +++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaUpdateService.java @@ -4,6 +4,8 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.NoSuchElementException; +import java.util.Objects; import java.util.stream.Collectors; import org.json.JSONArray; @@ -56,28 +58,27 @@ public class CamsodaUpdateService extends PaginatedScheduledService { if (response.isSuccessful()) { JSONObject json = new JSONObject(response.body().string()); if(json.has("status") && json.getBoolean("status")) { + JSONArray template = json.getJSONArray("template"); JSONArray results = json.getJSONArray("results"); for (int i = 0; i < results.length(); i++) { JSONObject result = results.getJSONObject(i); if(result.has("tpl")) { JSONArray tpl = result.getJSONArray("tpl"); - String name = tpl.getString(0); - String displayName = tpl.getString(1); + String name = tpl.getString(getTemplateIndex(template, "username")); + String displayName = tpl.getString(getTemplateIndex(template, "display_name")); // int connections = tpl.getInt(2); - String streamName = tpl.getString(5); - String tsize = tpl.getString(6); - String serverPrefix = tpl.getString(7); + String streamName = tpl.getString(getTemplateIndex(template, "stream_name")); + String tsize = tpl.getString(getTemplateIndex(template, "tsize")); + String serverPrefix = tpl.getString(getTemplateIndex(template, "server_prefix")); CamsodaModel model = (CamsodaModel) camsoda.createModel(name); - model.setDescription(tpl.getString(4)); - model.setSortOrder(tpl.getFloat(3)); + model.setDescription(tpl.getString(getTemplateIndex(template, "subject_html"))); + model.setSortOrder(tpl.getFloat(getTemplateIndex(template, "sort_value"))); long unixtime = System.currentTimeMillis() / 1000; String preview = "https://thumbs-orig.camsoda.com/thumbs/" + streamName + '/' + serverPrefix + '/' + tsize + '/' + unixtime + '/' + name + ".jpg?cb=" + unixtime; model.setPreview(preview); - if(result.has("edge_servers")) { - JSONArray edgeServers = result.getJSONArray("edge_servers"); - model.setStreamUrl("https://" + edgeServers.getString(0) + "/cam/mp4:" + streamName + "_h264_aac_480p/playlist.m3u8"); - } + JSONArray edgeServers = tpl.getJSONArray(getTemplateIndex(template, "edge_servers")); + model.setStreamUrl("https://" + edgeServers.getString(0) + "/cam/mp4:" + streamName + "_h264_aac_480p/playlist.m3u8"); model.setDisplayName(displayName); models.add(model); } else { @@ -125,6 +126,16 @@ public class CamsodaUpdateService extends PaginatedScheduledService { } } } + + private int getTemplateIndex(JSONArray template, String string) { + for (int i = 0; i < template.length(); i++) { + String s = template.getString(i); + if(Objects.equals(s, string)) { + return i; + } + } + throw new NoSuchElementException(string + " not found in template: " + template.toString()); + } }; }