From 0f884104654176956427f6bbdf3c484f2fcb25c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bazyli=20Brz=C3=B3ska?= Date: Mon, 10 Aug 2026 01:38:27 -0700 Subject: [PATCH] feat(json): expose voice-note attachment metadata (#2100) Include isVoiceNote in receive JSON and JSON-RPC attachment payloads. Add regression coverage for true and false serialization. --- .../org/asamk/signal/json/JsonAttachment.java | 6 ++- .../asamk/signal/json/JsonAttachmentTest.java | 47 +++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 src/test/java/org/asamk/signal/json/JsonAttachmentTest.java diff --git a/src/main/java/org/asamk/signal/json/JsonAttachment.java b/src/main/java/org/asamk/signal/json/JsonAttachment.java index 0dea76da..aaec36b2 100644 --- a/src/main/java/org/asamk/signal/json/JsonAttachment.java +++ b/src/main/java/org/asamk/signal/json/JsonAttachment.java @@ -13,7 +13,8 @@ record JsonAttachment( Integer width, Integer height, String caption, - Long uploadTimestamp + Long uploadTimestamp, + boolean isVoiceNote ) { static JsonAttachment from(MessageEnvelope.Data.Attachment attachment) { @@ -32,6 +33,7 @@ record JsonAttachment( width, height, caption, - uploadTimestamp); + uploadTimestamp, + attachment.isVoiceNote()); } } diff --git a/src/test/java/org/asamk/signal/json/JsonAttachmentTest.java b/src/test/java/org/asamk/signal/json/JsonAttachmentTest.java new file mode 100644 index 00000000..f4070162 --- /dev/null +++ b/src/test/java/org/asamk/signal/json/JsonAttachmentTest.java @@ -0,0 +1,47 @@ +package org.asamk.signal.json; + +import org.asamk.signal.manager.api.MessageEnvelope; +import org.asamk.signal.util.Util; +import org.junit.jupiter.api.Test; + +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class JsonAttachmentTest { + + @Test + void serializesVoiceNoteFlag() { + assertVoiceNoteFlag(true); + } + + @Test + void serializesNonVoiceNoteFlag() { + assertVoiceNoteFlag(false); + } + + private static void assertVoiceNoteFlag(final boolean isVoiceNote) { + final var attachment = new MessageEnvelope.Data.Attachment(Optional.empty(), + Optional.empty(), + Optional.empty(), + "audio/aac", + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + isVoiceNote, + false, + false); + + final var jsonAttachment = JsonAttachment.from(attachment); + final var json = Util.createJsonObjectMapper().valueToTree(jsonAttachment); + + assertEquals(isVoiceNote, jsonAttachment.isVoiceNote()); + assertTrue(json.has("isVoiceNote")); + assertEquals(isVoiceNote, json.get("isVoiceNote").booleanValue()); + } +}