From 805d8798aa735b8f1c17f6af655896299da3317c Mon Sep 17 00:00:00 2001 From: ArachisH Date: Fri, 18 Jan 2019 19:45:33 -0800 Subject: [PATCH] Updated for compatibility with the new Harble API messages JSON structure * Expose a static helper method 'updateCache(String,String)' for updating cache files via a string body instead of a JSONObject * Updated the HARBLE_API_URL to point towards the new API output path * Changed the way the messages JSONObject is parsed/handled --- G-Earth/src/main/java/gearth/misc/Cacher.java | 5 ++- .../gearth/misc/harble_api/HarbleAPI.java | 31 ++++++++++--------- .../misc/harble_api/HarbleAPIFetcher.java | 13 +++----- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/G-Earth/src/main/java/gearth/misc/Cacher.java b/G-Earth/src/main/java/gearth/misc/Cacher.java index 3e1ce2d..87db2bc 100644 --- a/G-Earth/src/main/java/gearth/misc/Cacher.java +++ b/G-Earth/src/main/java/gearth/misc/Cacher.java @@ -56,12 +56,15 @@ public class Cacher { return new JSONObject(); } public static void updateCache(JSONObject contents, String cache_filename) { + updateCache(contents.toString(), cache_filename); + } + public static void updateCache(String content, String cache_filename){ File parent_dir = new File(getCacheDir()); parent_dir.mkdirs(); try (FileWriter file = new FileWriter(new File(getCacheDir(), cache_filename))) { - file.write(contents.toString()); + file.write(content); file.flush(); } catch (IOException e) { diff --git a/G-Earth/src/main/java/gearth/misc/harble_api/HarbleAPI.java b/G-Earth/src/main/java/gearth/misc/harble_api/HarbleAPI.java index 9d19fbf..18fff31 100644 --- a/G-Earth/src/main/java/gearth/misc/harble_api/HarbleAPI.java +++ b/G-Earth/src/main/java/gearth/misc/harble_api/HarbleAPI.java @@ -2,6 +2,7 @@ package gearth.misc.harble_api; import gearth.misc.Cacher; import gearth.protocol.HMessage; +import org.json.JSONArray; import org.json.JSONObject; import java.io.File; @@ -93,7 +94,7 @@ public class HarbleAPI { } } - private void addMessage(HMessage.Side side, JSONObject object, String id) { + private void addMessage(HMessage.Side side, JSONObject object) { String name; try { name = object.getString("Name"); @@ -101,7 +102,7 @@ public class HarbleAPI { name = null; } String hash = object.getString("Hash"); - Integer headerId = Integer.parseInt(id); + Integer headerId = object.getInt("Id"); String structure; try { @@ -139,30 +140,32 @@ public class HarbleAPI { private void parse(JSONObject object) { try { - JSONObject incoming = object.getJSONObject("Incoming"); - JSONObject outgoing = object.getJSONObject("Outgoing"); + JSONArray incoming = object.getJSONArray("Incoming"); + JSONArray outgoing = object.getJSONArray("Outgoing"); if (incoming != null && outgoing != null) { - for (String key : incoming.keySet()) { + for (int i = 0; i < incoming.length(); i++) { try { - JSONObject inMsg = incoming.getJSONObject(key); - addMessage(HMessage.Side.TOCLIENT, inMsg, key); - } catch (Exception e) { + JSONObject message = incoming.getJSONObject(i); + addMessage(HMessage.Side.TOCLIENT, message); + } + catch (Exception e){ e.printStackTrace(); } } - for (String key : outgoing.keySet()) { - try { - JSONObject outMsg = outgoing.getJSONObject(key); - addMessage(HMessage.Side.TOSERVER, outMsg, key); - } catch (Exception e) { + for (int i = 0; i < outgoing.length(); i++) { + try{ + JSONObject message = outgoing.getJSONObject(i); + addMessage(HMessage.Side.TOSERVER, message); + } + catch (Exception e){ + e.printStackTrace(); } } } } catch (Exception e) { success = false; } - } public HarbleMessage getHarbleMessageFromHeaderId(HMessage.Side side, int headerId) { diff --git a/G-Earth/src/main/java/gearth/misc/harble_api/HarbleAPIFetcher.java b/G-Earth/src/main/java/gearth/misc/harble_api/HarbleAPIFetcher.java index c41e5f6..660d3e9 100644 --- a/G-Earth/src/main/java/gearth/misc/harble_api/HarbleAPIFetcher.java +++ b/G-Earth/src/main/java/gearth/misc/harble_api/HarbleAPIFetcher.java @@ -32,7 +32,7 @@ import java.io.IOException; public class HarbleAPIFetcher { public static final String CACHE_PREFIX = "HARBLE_API-"; - public static final String HARBLE_API_URL = "https://api.harble.net/revisions/$hotelversion$.json"; + public static final String HARBLE_API_URL = "https://api.harble.net/messages/$hotelversion$.json"; //latest fetched public static HarbleAPI HARBLEAPI = null; @@ -46,13 +46,10 @@ public class HarbleAPIFetcher { else { Connection connection = Jsoup.connect(HARBLE_API_URL.replace("$hotelversion$", hotelversion)).ignoreContentType(true); try { - Document doc = connection.get(); - Connection.Response response = connection.response(); + Connection.Response response = connection.execute(); if (response.statusCode() == 200) { - String s = doc.body().toString(); - s = s.substring(6, s.length() - 7); - JSONObject object = new JSONObject(s); - Cacher.updateCache(object, cacheName); + String messagesBodyJson = response.body(); + Cacher.updateCache(messagesBodyJson, cacheName); HARBLEAPI = new HarbleAPI(hotelversion); } else { @@ -66,7 +63,7 @@ public class HarbleAPIFetcher { } public static void main(String[] args) { - fetch("PRODUCTION-201810171204-70166177"); + fetch("PRODUCTION-201901141210-114421986"); HarbleAPI api = HARBLEAPI; HarbleAPI.HarbleMessage haMessage = api.getHarbleMessageFromHeaderId(HMessage.Side.TOSERVER, 525);