aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/github/moulberry/notenoughupdates/infopanes/HTMLInfoPane.java
diff options
context:
space:
mode:
authorRoman / Nea <roman.graef@gmail.com>2021-12-18 12:27:12 +0100
committerGitHub <noreply@github.com>2021-12-18 12:27:12 +0100
commit4e06a3b0ff9389ef75ee4e407ce4262e1b050ffc (patch)
tree8fad6665dbba933a75de2e1e81e3fdb36172a465 /src/main/java/io/github/moulberry/notenoughupdates/infopanes/HTMLInfoPane.java
parentaca006bb4d379b6afe79357f24957f035184636e (diff)
downloadnotenoughupdates-4e06a3b0ff9389ef75ee4e407ce4262e1b050ffc.tar.gz
notenoughupdates-4e06a3b0ff9389ef75ee4e407ce4262e1b050ffc.tar.bz2
notenoughupdates-4e06a3b0ff9389ef75ee4e407ce4262e1b050ffc.zip
Load wiki pages asynchronously. (#30)
Previous to this commit, wiki pages would be downloaded on the main rendering thread, preventing all rendering and user interaction while the download was occuring. This has now been shifted to the common forkpool provided by the JVM.
Diffstat (limited to 'src/main/java/io/github/moulberry/notenoughupdates/infopanes/HTMLInfoPane.java')
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/infopanes/HTMLInfoPane.java37
1 files changed, 19 insertions, 18 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/HTMLInfoPane.java b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/HTMLInfoPane.java
index a8a98880..4ce581a6 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/HTMLInfoPane.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/HTMLInfoPane.java
@@ -30,6 +30,7 @@ import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.StandardCharsets;
+import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@@ -92,24 +93,24 @@ public class HTMLInfoPane extends TextInfoPane {
/**
* Takes a wiki url, uses NEUManager#getWebFile to download the web file and passed that in to #createFromWiki
*/
- public static HTMLInfoPane createFromWikiUrl(NEUOverlay overlay, NEUManager manager, String name,
- String wikiUrl) {
- File f = manager.getWebFile(wikiUrl);
- if (f == null) {
- return new HTMLInfoPane(overlay, manager, "error", "error", "Failed to load wiki url: " + wikiUrl);
- }
+ public static CompletableFuture<HTMLInfoPane> createFromWikiUrl(NEUOverlay overlay, NEUManager manager, String name, String wikiUrl) {
+ return manager.getWebFile(wikiUrl).thenApply(f -> {
+ if (f == null) {
+ return new HTMLInfoPane(overlay, manager, "error", "error", "Failed to load wiki url: " + wikiUrl);
+ }
- StringBuilder sb = new StringBuilder();
- try (BufferedReader br = new BufferedReader(new InputStreamReader(
- new FileInputStream(f), StandardCharsets.UTF_8))) {
- String l;
- while ((l = br.readLine()) != null) {
- sb.append(l).append("\n");
+ StringBuilder sb = new StringBuilder();
+ try (BufferedReader br = new BufferedReader(new InputStreamReader(
+ new FileInputStream(f), StandardCharsets.UTF_8))) {
+ String l;
+ while ((l = br.readLine()) != null) {
+ sb.append(l).append("\n");
+ }
+ } catch (IOException e) {
+ return new HTMLInfoPane(overlay, manager, "error", "error", "Failed to load wiki url: " + wikiUrl);
}
- } catch (IOException e) {
- return new HTMLInfoPane(overlay, manager, "error", "error", "Failed to load wiki url: " + wikiUrl);
- }
- return createFromWiki(overlay, manager, name, f.getName(), sb.toString());
+ return createFromWikiText(overlay, manager, name, f.getName(), sb.toString());
+ });
}
/**
@@ -118,8 +119,8 @@ public class HTMLInfoPane extends TextInfoPane {
* a more permanent solution that can be abstracted to work with arbitrary wiki codes (eg. moulberry.github.io/
* files/neu_help.html).
*/
- public static HTMLInfoPane createFromWiki(NEUOverlay overlay, NEUManager manager, String name, String filename,
- String wiki) {
+ public static HTMLInfoPane createFromWikiText(NEUOverlay overlay, NEUManager manager, String name, String filename,
+ String wiki) {
String[] split = wiki.split("</infobox>");
wiki = split[split.length - 1]; //Remove everything before infobox
wiki = wiki.split("<span class=\"navbox-vde\">")[0]; //Remove navbox