diff --git a/src/main/java/org/asamk/signal/commands/GetAttachmentCommand.java b/src/main/java/org/asamk/signal/commands/GetAttachmentCommand.java index 8af4af2d..560be9f9 100644 --- a/src/main/java/org/asamk/signal/commands/GetAttachmentCommand.java +++ b/src/main/java/org/asamk/signal/commands/GetAttachmentCommand.java @@ -47,17 +47,15 @@ public class GetAttachmentCommand implements JsonRpcLocalCommand { final var id = ns.getString("id"); try(InputStream attachment = m.retrieveAttachment(id)) { - - final var bytes = attachment.readAllBytes(); - final var base64 = Base64.getEncoder().encodeToString(bytes); - if (outputWriter instanceof PlainTextWriter writer) { + final var bytes = attachment.readAllBytes(); + final var base64 = Base64.getEncoder().encodeToString(bytes); writer.println(base64); } else if (outputWriter instanceof JsonWriter writer) { - writer.write(new JsonAttachmentData(base64)); + writer.write(new JsonAttachmentData(attachment)); } } catch (FileNotFoundException ex) { - throw new UserErrorException("Could not find attachment with ID: " + id); + throw new UserErrorException("Could not find attachment with ID: " + id, ex); } catch (IOException ex) { throw new UnexpectedErrorException("An error occurred reading attachment: " + id, ex); } diff --git a/src/main/java/org/asamk/signal/json/JsonAttachmentData.java b/src/main/java/org/asamk/signal/json/JsonAttachmentData.java index d017ef7b..004f02d8 100644 --- a/src/main/java/org/asamk/signal/json/JsonAttachmentData.java +++ b/src/main/java/org/asamk/signal/json/JsonAttachmentData.java @@ -1,3 +1,9 @@ package org.asamk.signal.json; -public record JsonAttachmentData(String data) {} +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +import java.io.InputStream; + +public record JsonAttachmentData( + @JsonSerialize(using=JsonStreamSerializer.class) InputStream data +) {} diff --git a/src/main/java/org/asamk/signal/json/JsonStreamSerializer.java b/src/main/java/org/asamk/signal/json/JsonStreamSerializer.java new file mode 100644 index 00000000..6eb359cd --- /dev/null +++ b/src/main/java/org/asamk/signal/json/JsonStreamSerializer.java @@ -0,0 +1,20 @@ +package org.asamk.signal.json; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.io.InputStream; + +public class JsonStreamSerializer extends JsonSerializer { + + @Override + public void serialize( + final InputStream value, + final JsonGenerator jsonGenerator, + final SerializerProvider serializers + ) throws IOException { + jsonGenerator.writeBinary(value, -1); + } +}