From 99862869bc1d1f937b59efc815d595358cceb9dd Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Thu, 29 Jun 2023 13:03:27 +0200 Subject: [PATCH] replace GSON from error dialog --- .../cryptomator/ui/error/ErrorController.java | 31 ++++++++++++------- .../cryptomator/ui/error/ErrorDiscussion.java | 9 ++++++ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/error/ErrorController.java b/src/main/java/org/cryptomator/ui/error/ErrorController.java index 620a1f730..f4a891c51 100644 --- a/src/main/java/org/cryptomator/ui/error/ErrorController.java +++ b/src/main/java/org/cryptomator/ui/error/ErrorController.java @@ -1,11 +1,13 @@ package org.cryptomator.ui.error; -import com.google.common.reflect.TypeToken; -import com.google.gson.Gson; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import org.cryptomator.common.Environment; import org.cryptomator.common.ErrorCode; import org.cryptomator.common.Nullable; import org.cryptomator.ui.common.FxController; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Named; @@ -21,8 +23,8 @@ import javafx.scene.Scene; import javafx.scene.input.Clipboard; import javafx.scene.input.ClipboardContent; import javafx.stage.Stage; +import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.net.URI; import java.net.URLEncoder; import java.net.http.HttpClient; @@ -38,6 +40,8 @@ import java.util.concurrent.TimeUnit; public class ErrorController implements FxController { + private static final ObjectMapper JSON = new ObjectMapper(); + private static final Logger LOG = LoggerFactory.getLogger(ErrorController.class); private static final String ERROR_CODES_URL = "https://gist.githubusercontent.com/cryptobot/accba9fb9555e7192271b85606f97230/raw/errorcodes.json"; private static final String SEARCH_URL_FORMAT = "https://github.com/cryptomator/cryptomator/discussions/categories/errors?discussions_q=category:Errors+%s"; private static final String REPORT_URL_FORMAT = "https://github.com/cryptomator/cryptomator/discussions/new?category=Errors&title=Error+%s&body=%s"; @@ -45,13 +49,13 @@ public class ErrorController implements FxController { private static final String REPORT_BODY_TEMPLATE = """ OS: %s / %s App: %s / %s - + - + - + - + """; @@ -137,11 +141,12 @@ public class ErrorController implements FxController { } private void loadHttpResponse(HttpResponse response) { - if (response.statusCode() == 200) { - Map errorDiscussionMap = new Gson().fromJson(// - new InputStreamReader(response.body(), StandardCharsets.UTF_8),// - new TypeToken>() { - }.getType()); + if (response.statusCode() != 200) { + LOG.error("Status code {} when trying to load {} ", response.statusCode(), response.uri()); + } + try { + var typeRef = new TypeReference>() {}; + Map errorDiscussionMap = JSON.reader().forType(typeRef).readValue(response.body()); if (errorDiscussionMap.values().stream().anyMatch(this::containsMethodCode)) { Comparator comp = this::compareByFullErrorCode; @@ -155,6 +160,8 @@ public class ErrorController implements FxController { matchingErrorDiscussion.set(value.get()); } } + } catch (IOException e) { + LOG.error("Failed to load or parse JSON from " + response.uri(), e); } } diff --git a/src/main/java/org/cryptomator/ui/error/ErrorDiscussion.java b/src/main/java/org/cryptomator/ui/error/ErrorDiscussion.java index bc1663f6f..933e713ae 100644 --- a/src/main/java/org/cryptomator/ui/error/ErrorDiscussion.java +++ b/src/main/java/org/cryptomator/ui/error/ErrorDiscussion.java @@ -1,12 +1,21 @@ package org.cryptomator.ui.error; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) public class ErrorDiscussion { + @JsonProperty int upvoteCount; + @JsonProperty String title; + @JsonProperty String url; + @JsonProperty Answer answer; + @JsonIgnoreProperties(ignoreUnknown = true) static class Answer { }