mirror of
https://github.com/AsamK/signal-cli.git
synced 2026-09-20 06:09:21 +00:00
fix(json): expose data message metadata (#2104)
This commit is contained in:
parent
0f88410465
commit
7e802166a3
@ -16,6 +16,10 @@ record JsonDataMessage(
|
|||||||
Integer expiresInSeconds,
|
Integer expiresInSeconds,
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL) Boolean isExpirationUpdate,
|
@JsonInclude(JsonInclude.Include.NON_NULL) Boolean isExpirationUpdate,
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL) Boolean viewOnce,
|
@JsonInclude(JsonInclude.Include.NON_NULL) Boolean viewOnce,
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL) JsonGroupCallUpdate groupCallUpdate,
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL) Boolean isEndSession,
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL) Boolean isProfileKeyUpdate,
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL) Boolean hasProfileKey,
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL) JsonReaction reaction,
|
@JsonInclude(JsonInclude.Include.NON_NULL) JsonReaction reaction,
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL) JsonQuote quote,
|
@JsonInclude(JsonInclude.Include.NON_NULL) JsonQuote quote,
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL) JsonPayment payment,
|
@JsonInclude(JsonInclude.Include.NON_NULL) JsonPayment payment,
|
||||||
@ -47,6 +51,10 @@ record JsonDataMessage(
|
|||||||
final var expiresInSeconds = dataMessage.expiresInSeconds();
|
final var expiresInSeconds = dataMessage.expiresInSeconds();
|
||||||
final var isExpirationUpdate = dataMessage.isExpirationUpdate();
|
final var isExpirationUpdate = dataMessage.isExpirationUpdate();
|
||||||
final var viewOnce = dataMessage.isViewOnce();
|
final var viewOnce = dataMessage.isViewOnce();
|
||||||
|
final var groupCallUpdate = dataMessage.groupCallUpdate().map(JsonGroupCallUpdate::from).orElse(null);
|
||||||
|
final var isEndSession = dataMessage.isEndSession();
|
||||||
|
final var isProfileKeyUpdate = dataMessage.isProfileKeyUpdate();
|
||||||
|
final var hasProfileKey = dataMessage.hasProfileKey();
|
||||||
final var reaction = dataMessage.reaction().map(JsonReaction::from).orElse(null);
|
final var reaction = dataMessage.reaction().map(JsonReaction::from).orElse(null);
|
||||||
final var quote = dataMessage.quote().isPresent() ? JsonQuote.from(dataMessage.quote().get()) : null;
|
final var quote = dataMessage.quote().isPresent() ? JsonQuote.from(dataMessage.quote().get()) : null;
|
||||||
final var payment = dataMessage.payment().isPresent() ? JsonPayment.from(dataMessage.payment().get()) : null;
|
final var payment = dataMessage.payment().isPresent() ? JsonPayment.from(dataMessage.payment().get()) : null;
|
||||||
@ -86,6 +94,10 @@ record JsonDataMessage(
|
|||||||
expiresInSeconds,
|
expiresInSeconds,
|
||||||
isExpirationUpdate,
|
isExpirationUpdate,
|
||||||
viewOnce,
|
viewOnce,
|
||||||
|
groupCallUpdate,
|
||||||
|
isEndSession,
|
||||||
|
isProfileKeyUpdate,
|
||||||
|
hasProfileKey,
|
||||||
reaction,
|
reaction,
|
||||||
quote,
|
quote,
|
||||||
payment,
|
payment,
|
||||||
|
|||||||
13
src/main/java/org/asamk/signal/json/JsonGroupCallUpdate.java
Normal file
13
src/main/java/org/asamk/signal/json/JsonGroupCallUpdate.java
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package org.asamk.signal.json;
|
||||||
|
|
||||||
|
import org.asamk.signal.manager.api.MessageEnvelope;
|
||||||
|
|
||||||
|
import io.micronaut.jsonschema.JsonSchema;
|
||||||
|
|
||||||
|
@JsonSchema(title = "GroupCallUpdate")
|
||||||
|
record JsonGroupCallUpdate(String eraId) {
|
||||||
|
|
||||||
|
static JsonGroupCallUpdate from(MessageEnvelope.Data.GroupCallUpdate groupCallUpdate) {
|
||||||
|
return new JsonGroupCallUpdate(groupCallUpdate.eraId());
|
||||||
|
}
|
||||||
|
}
|
||||||
77
src/test/java/org/asamk/signal/json/JsonDataMessageTest.java
Normal file
77
src/test/java/org/asamk/signal/json/JsonDataMessageTest.java
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
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.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
class JsonDataMessageTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void serializesProtocolMetadata() {
|
||||||
|
final var dataMessage = dataMessage(Optional.of(new MessageEnvelope.Data.GroupCallUpdate("era-id")),
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
true);
|
||||||
|
|
||||||
|
final var json = Util.createJsonObjectMapper().valueToTree(JsonDataMessage.from(dataMessage, null));
|
||||||
|
|
||||||
|
assertEquals("era-id", json.get("groupCallUpdate").get("eraId").textValue());
|
||||||
|
assertTrue(json.get("isEndSession").booleanValue());
|
||||||
|
assertTrue(json.get("isProfileKeyUpdate").booleanValue());
|
||||||
|
assertTrue(json.get("hasProfileKey").booleanValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void omitsAbsentGroupCallUpdateAndSerializesFalseFlags() {
|
||||||
|
final var dataMessage = dataMessage(Optional.empty(), false, false, false);
|
||||||
|
|
||||||
|
final var json = Util.createJsonObjectMapper().valueToTree(JsonDataMessage.from(dataMessage, null));
|
||||||
|
|
||||||
|
assertFalse(json.has("groupCallUpdate"));
|
||||||
|
assertFalse(json.get("isEndSession").booleanValue());
|
||||||
|
assertFalse(json.get("isProfileKeyUpdate").booleanValue());
|
||||||
|
assertFalse(json.get("hasProfileKey").booleanValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static MessageEnvelope.Data dataMessage(
|
||||||
|
final Optional<MessageEnvelope.Data.GroupCallUpdate> groupCallUpdate,
|
||||||
|
final boolean isEndSession,
|
||||||
|
final boolean isProfileKeyUpdate,
|
||||||
|
final boolean hasProfileKey
|
||||||
|
) {
|
||||||
|
return new MessageEnvelope.Data(1L,
|
||||||
|
Optional.empty(),
|
||||||
|
Optional.empty(),
|
||||||
|
groupCallUpdate,
|
||||||
|
Optional.empty(),
|
||||||
|
0,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
isEndSession,
|
||||||
|
isProfileKeyUpdate,
|
||||||
|
hasProfileKey,
|
||||||
|
Optional.empty(),
|
||||||
|
Optional.empty(),
|
||||||
|
Optional.empty(),
|
||||||
|
List.of(),
|
||||||
|
Optional.empty(),
|
||||||
|
Optional.empty(),
|
||||||
|
List.of(),
|
||||||
|
Optional.empty(),
|
||||||
|
Optional.empty(),
|
||||||
|
Optional.empty(),
|
||||||
|
List.of(),
|
||||||
|
List.of(),
|
||||||
|
List.of(),
|
||||||
|
Optional.empty(),
|
||||||
|
Optional.empty(),
|
||||||
|
Optional.empty());
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user