From 11f1a401151ffbc3f1ea043f27f3f642a6576790 Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Sun, 24 Sep 2017 04:06:11 -0500 Subject: [PATCH] Threaded sub emote downloading so it no longer hangs the program. Because the JSON file size increased dramatically, cache it and only re-download once a day. --- sigIRCv2.jar | Bin 3374720 -> 3376598 bytes src/sig/sigIRC.java | 53 +++++++++++++++++++++++++++++------ src/sig/utils/FileUtils.java | 29 +++++++++++++++++++ 3 files changed, 73 insertions(+), 9 deletions(-) diff --git a/sigIRCv2.jar b/sigIRCv2.jar index 7c933c6bac49eeb273abdc324acc2d3eea6ed8cf..c48502d0d868d1098a6ee6a6aca5fef75bbecc81 100644 GIT binary patch delta 37439 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

{Mc#ZzLhc`!h{L4QhY5v0)H_E?{ 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 delta 35233 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 JO2(h-`ac;@uB89~ diff --git a/src/sig/sigIRC.java b/src/sig/sigIRC.java index a723b95..5a0c57c 100644 --- a/src/sig/sigIRC.java +++ b/src/sig/sigIRC.java @@ -107,7 +107,9 @@ public class sigIRC{ public static int twitchmodule_newfollowerImgLogoSize=32; public static boolean testMode=false; public final static String TWITCHEMOTEURL = "https://static-cdn.jtvnw.net/emoticons/v1/"; + public final static String SUBEMOTELISTFILE = "sigIRC/subemotes.json"; public static long channel_id = -1; + public static int lastSubEmoteUpdate = -1; public static Twitch manager = new Twitch(); @@ -151,9 +153,10 @@ public class sigIRC{ touhoumothermodule_width = config.getInteger("TOUHOUMOTHER_module_width",320); touhoumothermodule_height = config.getInteger("TOUHOUMOTHER_module_height",312); hardwareAcceleration = config.getBoolean("hardware_acceleration",true); + lastSubEmoteUpdate = config.getInteger("lastSubEmote_APIUpdate",Calendar.getInstance().get(Calendar.DAY_OF_YEAR)); manager.setClientId("o4c2x0l3e82scgar4hpxg6m5dfjbem"); //System.out.println(manager.auth().hasAccessToken()); - + DownloadAllRequiredDependencies(); String[] filedata = FileUtils.readFromFile(BASEDIR+"sigIRC/oauthToken.txt"); @@ -170,7 +173,9 @@ public class sigIRC{ public void run() { window = createAndShowGUI(); InitializeModules(); + //System.out.println("Modules initialized."); performTwitchEmoteUpdate(); + //System.out.println("Twitch emote update done."); downloadsComplete=true; } }); @@ -212,6 +217,7 @@ public class sigIRC{ manager = new FileManager("backcolor.png"); manager.verifyAndFetchFileFromServer(); manager = new FileManager("drag_bar.png"); manager.verifyAndFetchFileFromServer(); manager = new FileManager("WSplits"); manager.verifyAndFetchFileFromServer(); + System.out.println("Downloaded Dependencies."); } private static void InitializeModules() { @@ -315,21 +321,50 @@ public class sigIRC{ private static void performTwitchEmoteUpdate() { try { JSONObject twitchemotes = FileUtils.readJsonFromUrl("https://twitchemotes.com/api_cache/v3/global.json"); + System.out.println("Twitch emote Json read."); for (String emotes : twitchemotes.keySet()) { JSONObject emote = twitchemotes.getJSONObject(emotes); int id = emote.getInt("id"); String name = emote.getString("code"); emoticons.add(new Emoticon(name, new URL(TWITCHEMOTEURL+id+"/1.0"))); + System.out.println("Emote "+id+" with name "+name); } - JSONObject subemotes = FileUtils.readJsonFromUrl("https://twitchemotes.com/api_cache/v3/subscriber.json"); - String[] sub_emotes = FileUtils.readFromFile(sigIRC.BASEDIR+"sigIRC/Emotes/subscribers.txt"); - for (String s : sub_emotes) { - if (s.length()>0) { - s=s.trim(); - //System.out.println("Got sub emote info for "+s); - downloadSubEmotes(subemotes,s); + Thread downloadThread = new Thread(){ + public void run() { + JSONObject subemotes = null; + try { + File filer = new File(SUBEMOTELISTFILE); + if (!filer.exists()) { + System.out.println("Local copy of Sub emotes not found. Downloading in background..."); + subemotes = FileUtils.readJsonFromUrl("https://twitchemotes.com/api_cache/v3/subscriber.json",SUBEMOTELISTFILE,true); + } else { + if (lastSubEmoteUpdate == Calendar.getInstance().get(Calendar.DAY_OF_YEAR)) { + System.out.println("Using local copy of Sub emote JSON."); + subemotes = FileUtils.readJsonFromFile(SUBEMOTELISTFILE); + } else { + System.out.println("Local copy of Sub emote JSON out-of-date! Re-downloading in background..."); + subemotes = FileUtils.readJsonFromUrl("https://twitchemotes.com/api_cache/v3/subscriber.json",SUBEMOTELISTFILE,true); + } + } + } catch (JSONException | IOException e) { + e.printStackTrace(); + } + lastSubEmoteUpdate = Calendar.getInstance().get(Calendar.DAY_OF_YEAR); + config.setInteger("lastSubEmote_APIUpdate", lastSubEmoteUpdate); + //System.out.println("Subscriber object: "+subemotes); + String[] sub_emotes = FileUtils.readFromFile(sigIRC.BASEDIR+"sigIRC/Emotes/subscribers.txt"); + //System.out.println("Sub emotes read."); + for (String s : sub_emotes) { + if (s.length()>0) { + s=s.trim(); + System.out.println("Got sub emote info for "+s); + downloadSubEmotes(subemotes,s); + } + } + subemotes=null; } - } + }; + downloadThread.start(); /*JSONObject emotelist = twitchemotes.getJSONObject("emotes"); JSONObject templatelist = twitchemotes.getJSONObject("template"); String templateurl = templatelist.getString("small"); diff --git a/src/sig/utils/FileUtils.java b/src/sig/utils/FileUtils.java index 049481d..c7ff7f3 100644 --- a/src/sig/utils/FileUtils.java +++ b/src/sig/utils/FileUtils.java @@ -60,6 +60,35 @@ public class FileUtils { BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); String jsonText = readAll(rd); JSONObject json = new JSONObject(jsonText); + jsonText=null; + return json; + } finally { + is.close(); + } + } + + public static JSONObject readJsonFromFile(String file) throws IOException, JSONException { + InputStream is = new FileInputStream(new File(file)); + try { + BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); + String jsonText = readAll(rd); + JSONObject json = new JSONObject(jsonText); + jsonText=null; + return json; + } finally { + is.close(); + } + } + + public static JSONObject readJsonFromUrl(String url, String file, boolean writeToFile) throws IOException, JSONException { + InputStream is = new URL(url).openStream(); + try { + BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); + String jsonText = readAll(rd); + if (writeToFile) { + writetoFile(new String[]{jsonText},file); + } + JSONObject json = new JSONObject(jsonText); return json; } finally { is.close();