From: AsamK Date: Sun, 7 Nov 2021 14:13:53 +0000 (+0100) Subject: Move Writer creation out of WriterImpls X-Git-Tag: v0.10.0~77 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/5dd602614cc44c30ef4a60a1c043e44a8e31a8ca Move Writer creation out of WriterImpls --- diff --git a/src/main/java/org/asamk/signal/App.java b/src/main/java/org/asamk/signal/App.java index 9f216daa..7375a5c3 100644 --- a/src/main/java/org/asamk/signal/App.java +++ b/src/main/java/org/asamk/signal/App.java @@ -32,8 +32,11 @@ import org.freedesktop.dbus.exceptions.DBusExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.BufferedWriter; import java.io.File; import java.io.IOException; +import java.io.OutputStreamWriter; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; @@ -105,9 +108,10 @@ public class App { var outputType = outputTypeInput == null ? command.getSupportedOutputTypes().stream().findFirst().orElse(null) : outputTypeInput; + var writer = new BufferedWriter(new OutputStreamWriter(System.out, Charset.defaultCharset())); var outputWriter = outputType == null ? null - : outputType == OutputType.JSON ? new JsonWriterImpl(System.out) : new PlainTextWriterImpl(System.out); + : outputType == OutputType.JSON ? new JsonWriterImpl(writer) : new PlainTextWriterImpl(writer); if (outputWriter != null && !command.getSupportedOutputTypes().contains(outputType)) { throw new UserErrorException("Command doesn't support output type " + outputType); diff --git a/src/main/java/org/asamk/signal/JsonWriterImpl.java b/src/main/java/org/asamk/signal/JsonWriterImpl.java index f0daaa85..aabf399a 100644 --- a/src/main/java/org/asamk/signal/JsonWriterImpl.java +++ b/src/main/java/org/asamk/signal/JsonWriterImpl.java @@ -5,22 +5,17 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.asamk.signal.util.Util; -import java.io.BufferedWriter; import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; import java.io.Writer; -import java.nio.charset.StandardCharsets; public class JsonWriterImpl implements JsonWriter { private final Writer writer; private final ObjectMapper objectMapper; - public JsonWriterImpl(final OutputStream outputStream) { - this.writer = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)); - - objectMapper = Util.createJsonObjectMapper(); + public JsonWriterImpl(final Writer writer) { + this.writer = writer; + this.objectMapper = Util.createJsonObjectMapper(); } public synchronized void write(final Object object) { diff --git a/src/main/java/org/asamk/signal/PlainTextWriterImpl.java b/src/main/java/org/asamk/signal/PlainTextWriterImpl.java index bb18b7f3..f43fe73e 100644 --- a/src/main/java/org/asamk/signal/PlainTextWriterImpl.java +++ b/src/main/java/org/asamk/signal/PlainTextWriterImpl.java @@ -2,10 +2,7 @@ package org.asamk.signal; import org.slf4j.helpers.MessageFormatter; -import java.io.BufferedWriter; import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; import java.io.Writer; public final class PlainTextWriterImpl implements PlainTextWriter { @@ -14,8 +11,8 @@ public final class PlainTextWriterImpl implements PlainTextWriter { private PlainTextWriter indentedWriter; - public PlainTextWriterImpl(final OutputStream outputStream) { - this.writer = new BufferedWriter(new OutputStreamWriter(outputStream)); + public PlainTextWriterImpl(final Writer writer) { + this.writer = writer; } @Override diff --git a/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java b/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java index b61916a1..4cfa5891 100644 --- a/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java +++ b/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java @@ -16,6 +16,7 @@ import org.slf4j.LoggerFactory; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.io.Reader; import java.util.List; import java.util.function.Supplier; @@ -49,16 +50,20 @@ public class JsonRpcDispatcherCommand implements LocalCommand { m.setIgnoreAttachments(ignoreAttachments); final var jsonOutputWriter = (JsonWriter) outputWriter; - final var reader = new BufferedReader(new InputStreamReader(System.in)); - final Supplier lineSupplier = () -> { + final Supplier lineSupplier = getLineSupplier(new InputStreamReader(System.in)); + + final var handler = new SignalJsonRpcDispatcherHandler(m, jsonOutputWriter, lineSupplier); + handler.handleConnection(); + + private Supplier getLineSupplier(final Reader reader) { + final var bufferedReader = new BufferedReader(reader); + return () -> { try { - return reader.readLine(); + return bufferedReader.readLine(); } catch (IOException e) { - throw new AssertionError(e); + logger.error("Error occurred while reading line", e); + return null; } }; - - final var handler = new SignalJsonRpcDispatcherHandler(m, jsonOutputWriter, lineSupplier); - handler.handleConnection(); } }