From 04cedbab133402ace7efcf3a4e329e75d13a310e Mon Sep 17 00:00:00 2001 From: Pixirora Date: Fri, 12 Jul 2024 15:25:46 -0400 Subject: [PATCH] Support Java 8 in the core library --- subprojects/core/build.gradle.kts | 2 +- .../pixaurora/kit_tunes/impl/Constants.java | 4 +-- .../pixaurora/kit_tunes/impl/KitTunes.java | 3 ++- .../kit_tunes/impl/config/ConfigManager.java | 7 +++-- .../impl/config/dispatch/DispatchGroup.java | 9 ++++++- .../error/UnhandledKitTunesException.java | 12 +++++++++ .../listener/ScrobblingMusicListener.java | 2 +- .../kit_tunes/impl/network/HttpHelper.java | 26 +++++++++++++++++-- .../kit_tunes/impl/network/XMLHelper.java | 2 +- .../impl/scrobble/LastFMScrobbler.java | 14 +++++----- .../kit_tunes/impl/scrobble/Scrobbler.java | 4 +-- .../impl/scrobble/ScrobblerSetup.java | 4 +-- .../kit_tunes/impl/ui/MinecraftClient.java | 2 +- 13 files changed, 67 insertions(+), 24 deletions(-) diff --git a/subprojects/core/build.gradle.kts b/subprojects/core/build.gradle.kts index eb62ceb..7bb2b2d 100644 --- a/subprojects/core/build.gradle.kts +++ b/subprojects/core/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("kit_tunes.java.17") // TODO: Switch to kit_tunes.java.08 + id("kit_tunes.java.08") id("kit_tunes.base") } diff --git a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/Constants.java b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/Constants.java index 9f8099e..eacbaf5 100644 --- a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/Constants.java +++ b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/Constants.java @@ -11,8 +11,8 @@ public abstract class Constants { public static final String MOD_VERSION; public static final String HOMEPAGE; - public static final Path SCROBBLER_CACHE_PATH = QuiltLoader.getCacheDir() - .resolve(Path.of(Constants.MOD_ID, "scrobblers.json")); + public static final Path SCROBBLER_CACHE_PATH = QuiltLoader.getCacheDir().resolve(Constants.MOD_ID) + .resolve("scrobblers.json"); static { ModContainer mod = QuiltLoader.getModContainer(MOD_ID).get(); // Should never be null, since we're running from diff --git a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/KitTunes.java b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/KitTunes.java index 36a4e13..900b711 100644 --- a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/KitTunes.java +++ b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/KitTunes.java @@ -1,5 +1,6 @@ package net.pixaurora.kit_tunes.impl; +import java.util.Arrays; import java.util.List; import java.util.concurrent.Executor; import java.util.concurrent.Executors; @@ -20,7 +21,7 @@ public class KitTunes { public static final Logger LOGGER = LoggerFactory.getLogger(Constants.MOD_ID); public static final ConfigManager SCROBBLER_CACHE = new ConfigManager<>( - Constants.SCROBBLER_CACHE_PATH, ScrobblerCache.class, () -> new ScrobblerCache(List.of())); + Constants.SCROBBLER_CACHE_PATH, ScrobblerCache.class, () -> new ScrobblerCache(Arrays.asList())); public static final MinecraftUICompat UI_LAYER = ServiceLoading.loadJustOneOrThrow(MinecraftUICompat.class); diff --git a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/config/ConfigManager.java b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/config/ConfigManager.java index d459378..1513105 100644 --- a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/config/ConfigManager.java +++ b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/config/ConfigManager.java @@ -1,8 +1,11 @@ package net.pixaurora.kit_tunes.impl.config; +import java.io.BufferedReader; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.StandardOpenOption; import java.util.function.Consumer; import java.util.function.Supplier; @@ -48,7 +51,7 @@ private boolean configLocationWritable() { } private T load() throws IOException, JsonParseException { - String configData = Files.readString(this.savePath); + BufferedReader configData = Files.newBufferedReader(this.savePath, StandardCharsets.UTF_8); return Serialization.serializer().fromJson(configData, this.configClass); } @@ -57,7 +60,7 @@ private boolean save(T config) { String result = Serialization.serializer().toJson(config, this.configClass); try { - Files.writeString(this.savePath, result); + Files.write(this.savePath, result.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE); return true; } catch (IOException exception) { diff --git a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/config/dispatch/DispatchGroup.java b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/config/dispatch/DispatchGroup.java index 3134d97..509b193 100644 --- a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/config/dispatch/DispatchGroup.java +++ b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/config/dispatch/DispatchGroup.java @@ -14,7 +14,14 @@ import net.pixaurora.kit_tunes.impl.config.DualSerializer; -public record DispatchGroup, T extends DispatchType>(String typeName, List types) { +public class DispatchGroup, T extends DispatchType> { + private final String typeName; + private final List types; + + public DispatchGroup(String typeName, List types) { + this.typeName = typeName; + this.types = types; + } public T lookupBy(String lookupType, Function getter, G lookupObject) { Optional foundType = this.types.stream().filter(type -> getter.apply(type).equals(lookupObject)).findFirst(); diff --git a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/error/UnhandledKitTunesException.java b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/error/UnhandledKitTunesException.java index d51211c..b451a3f 100644 --- a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/error/UnhandledKitTunesException.java +++ b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/error/UnhandledKitTunesException.java @@ -30,7 +30,19 @@ public static T runOrThrow(ErroringSupplier action) throws UnhandledKitTu } } + public static void runOrThrow(ErroringRunnable action) throws UnhandledKitTunesException { + try { + action.run(); + } catch (Throwable e) { + throw new UnhandledKitTunesException(e); + } + } + public static interface ErroringSupplier { public T run() throws Throwable; } + + public static interface ErroringRunnable { + public void run() throws Throwable; + } } diff --git a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/listener/ScrobblingMusicListener.java b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/listener/ScrobblingMusicListener.java index a668a23..06a1c73 100644 --- a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/listener/ScrobblingMusicListener.java +++ b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/listener/ScrobblingMusicListener.java @@ -40,7 +40,7 @@ public void onTrackEnd(TrackEndEvent event) { .execute(scrobblers -> scrobblers.completeScrobbling(new ScrobbledTrack(track, progress))); } else { KitTunes.LOGGER.info("Skipping scrobbling " + track.name() + " because it only played for " - + progress.amountPlayed().toSeconds() + " seconds!"); + + (float) progress.amountPlayed().toMillis() / 1000 + " seconds!"); } } diff --git a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/network/HttpHelper.java b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/network/HttpHelper.java index 002e8c9..5087566 100644 --- a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/network/HttpHelper.java +++ b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/network/HttpHelper.java @@ -2,6 +2,7 @@ import java.io.IOException; import java.io.InputStream; +import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; @@ -13,6 +14,7 @@ import java.util.Map; import net.pixaurora.kit_tunes.impl.Constants; +import net.pixaurora.kit_tunes.impl.KitTunes; import net.pixaurora.kit_tunes.impl.error.UnhandledKitTunesException; public class HttpHelper { @@ -36,6 +38,19 @@ public static Map defaultHeaders() { return headers; } + public static void logResponse(InputStream data) throws IOException { + StringBuilder builder = new StringBuilder(); + + int c = data.read(); + while (c != -1) { + builder.append((char) c); + + c = data.read(); + } + + KitTunes.LOGGER.info("Received response: " + builder.toString()); + } + private static InputStream handleRequest(String method, String endpoint, Map queryParameters) throws IOException { URL url = new URL(endpoint + createQuery(queryParameters)); @@ -53,6 +68,8 @@ private static InputStream handleRequest(String method, String endpoint, Map queryParameters) { List query = new ArrayList<>(queryParameters.size()); - for (var parameter : queryParameters.entrySet()) { - query.add(parameter.getKey() + "=" + URLEncoder.encode(parameter.getValue(), StandardCharsets.UTF_8)); + for (Map.Entry parameter : queryParameters.entrySet()) { + try { + query.add(parameter.getKey() + "=" + + URLEncoder.encode(parameter.getValue(), StandardCharsets.UTF_8.toString())); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("Should never happen, URL encoding is hard-coded.", e); + } } return query.size() == 0 ? "" : "?" + String.join("&", query); diff --git a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/network/XMLHelper.java b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/network/XMLHelper.java index 828320d..0d2cbad 100644 --- a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/network/XMLHelper.java +++ b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/network/XMLHelper.java @@ -19,7 +19,7 @@ public class XMLHelper { private static final DocumentBuilder BUILDER = createBuilder(); public static DocumentBuilder createBuilder() { - DocumentBuilderFactory factory = DocumentBuilderFactory.newDefaultInstance(); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setAttribute(XMLConstants.FEATURE_SECURE_PROCESSING, true); diff --git a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/scrobble/LastFMScrobbler.java b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/scrobble/LastFMScrobbler.java index 1a1c653..e242215 100644 --- a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/scrobble/LastFMScrobbler.java +++ b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/scrobble/LastFMScrobbler.java @@ -1,16 +1,16 @@ package net.pixaurora.kit_tunes.impl.scrobble; import java.io.InputStream; -import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.stream.Collectors; import org.w3c.dom.Document; import org.w3c.dom.Node; -import net.pixaurora.kit_tunes.impl.KitTunes; import net.pixaurora.kit_tunes.impl.error.KitTunesException; import net.pixaurora.kit_tunes.impl.error.ScrobblerParsingException; import net.pixaurora.kit_tunes.impl.error.UnhandledKitTunesException; @@ -84,17 +84,15 @@ public void completeScrobbling(ScrobbleInfo track) throws KitTunesException { private void handleScrobbling(Map args) throws KitTunesException { InputStream responseBody = HttpHelper.post(ROOT_API_URL, args); - String body = UnhandledKitTunesException.runOrThrow(() -> new String(responseBody.readAllBytes())); - - KitTunes.LOGGER.info(body); + UnhandledKitTunesException.runOrThrow(() -> HttpHelper.logResponse(responseBody)); } private static Map addSignature(Map parameters) { - var sortedParameters = new ArrayList<>(parameters.entrySet()); - sortedParameters.sort(Comparator.comparing(entry -> entry.getKey())); + List> sortedParameters = parameters.entrySet().stream() + .sorted(Comparator.comparing(entry -> entry.getKey())).collect(Collectors.toList()); String regularSignature = ""; - for (var parameter : sortedParameters) { + for (Map.Entry parameter : sortedParameters) { regularSignature += parameter.getKey() + parameter.getValue(); } diff --git a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/scrobble/Scrobbler.java b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/scrobble/Scrobbler.java index 4bf6635..582a199 100644 --- a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/scrobble/Scrobbler.java +++ b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/scrobble/Scrobbler.java @@ -1,6 +1,6 @@ package net.pixaurora.kit_tunes.impl.scrobble; -import java.util.List; +import java.util.Arrays; import net.pixaurora.kit_tunes.impl.config.dispatch.DispatchGroup; import net.pixaurora.kit_tunes.impl.config.dispatch.SpecifiesType; @@ -8,7 +8,7 @@ public interface Scrobbler extends SimpleScrobbler, SpecifiesType { public static final DispatchGroup> TYPES = new DispatchGroup<>( - "scrobbler", List.of(LastFMScrobbler.TYPE)); + "scrobbler", Arrays.asList(LastFMScrobbler.TYPE)); public static final int SETUP_PORT = 19686; diff --git a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/scrobble/ScrobblerSetup.java b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/scrobble/ScrobblerSetup.java index 364109d..eaab272 100644 --- a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/scrobble/ScrobblerSetup.java +++ b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/scrobble/ScrobblerSetup.java @@ -12,8 +12,8 @@ public class ScrobblerSetup { public ScrobblerSetup(SetupServer server, ScrobblerType scrobblerType, long timeout, TimeUnit unit) { this.server = server; - this.awaitedScrobbler = server.awaitedToken().orTimeout(timeout, unit) - .whenComplete((token, error) -> server.cleanup()).thenApply(token -> { + this.awaitedScrobbler = server.awaitedToken().whenComplete((token, error) -> server.cleanup()) + .thenApply(token -> { return scrobblerType.setupMethod().createScrobbler(token); }); } diff --git a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/ui/MinecraftClient.java b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/ui/MinecraftClient.java index 8b915ab..1b7dcb1 100644 --- a/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/ui/MinecraftClient.java +++ b/subprojects/core/src/main/java/net/pixaurora/kit_tunes/impl/ui/MinecraftClient.java @@ -8,7 +8,7 @@ import net.pixaurora.kit_tunes.impl.ui.text.Component; public interface MinecraftClient { - private static MinecraftUICompat impl() { + static MinecraftUICompat impl() { return KitTunes.UI_LAYER; }