Skip to content

Commit

Permalink
Implement EditMessageReceived signal for dbus
Browse files Browse the repository at this point in the history
  • Loading branch information
AsamK committed Oct 10, 2023
1 parent 7b5b577 commit a66dd0d
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 1 deletion.
7 changes: 6 additions & 1 deletion graalvm-config-dir/reflect-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -545,7 +545,7 @@
"name":"org.asamk.Signal",
"allDeclaredMethods":true,
"allDeclaredClasses":true,
"methods":[{"name":"getSelfNumber","parameterTypes":[] }, {"name":"sendGroupMessageReaction","parameterTypes":["java.lang.String","boolean","java.lang.String","long","byte[]"] }, {"name":"sendMessage","parameterTypes":["java.lang.String","java.util.List","java.lang.String"] }, {"name":"sendMessageReaction","parameterTypes":["java.lang.String","boolean","java.lang.String","long","java.util.List"] }]
"methods":[{"name":"getSelfNumber","parameterTypes":[] }, {"name":"sendGroupMessageReaction","parameterTypes":["java.lang.String","boolean","java.lang.String","long","byte[]"] }, {"name":"sendMessage","parameterTypes":["java.lang.String","java.util.List","java.lang.String"] }, {"name":"sendMessageReaction","parameterTypes":["java.lang.String","boolean","java.lang.String","long","java.util.List"] }, {"name":"subscribeReceive","parameterTypes":[] }, {"name":"unsubscribeReceive","parameterTypes":[] }]
},
{
"name":"org.asamk.Signal$Configuration",
Expand All @@ -557,6 +557,11 @@
"allDeclaredMethods":true,
"allDeclaredClasses":true
},
{
"name":"org.asamk.Signal$EditMessageReceived",
"queryAllDeclaredConstructors":true,
"queryAllPublicConstructors":true
},
{
"name":"org.asamk.Signal$Error$AttachmentInvalid",
"methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
Expand Down
52 changes: 52 additions & 0 deletions src/main/java/org/asamk/Signal.java
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,58 @@ public Map<String, Variant<?>> getExtras() {
}
}

class EditMessageReceived extends DBusSignal {

private final long timestamp;
private final long targetSentTimestamp;
private final String sender;
private final byte[] groupId;
private final String message;
private final Map<String, Variant<?>> extras;

public EditMessageReceived(
String objectpath,
long timestamp,
final long targetSentTimestamp,
String sender,
byte[] groupId,
String message,
final Map<String, Variant<?>> extras
) throws DBusException {
super(objectpath, timestamp, targetSentTimestamp, sender, groupId, message, extras);
this.timestamp = timestamp;
this.targetSentTimestamp = targetSentTimestamp;
this.sender = sender;
this.groupId = groupId;
this.message = message;
this.extras = extras;
}

public long getTimestamp() {
return timestamp;
}

public long getTargetSentTimestamp() {
return targetSentTimestamp;
}

public String getSender() {
return sender;
}

public byte[] getGroupId() {
return groupId;
}

public String getMessage() {
return message;
}

public Map<String, Variant<?>> getExtras() {
return extras;
}
}

class MessageReceived extends DBusSignal {

private final long timestamp;
Expand Down
45 changes: 45 additions & 0 deletions src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ public class DbusManagerImpl implements Manager {
private final Set<ReceiveMessageHandler> messageHandlers = new HashSet<>();
private final List<Runnable> closedListeners = new ArrayList<>();
private DBusSigHandler<Signal.MessageReceivedV2> dbusMsgHandler;
private DBusSigHandler<Signal.EditMessageReceived> dbusEditMsgHandler;
private DBusSigHandler<Signal.ReceiptReceivedV2> dbusRcptHandler;
private DBusSigHandler<Signal.SyncMessageReceivedV2> dbusSyncHandler;

Expand Down Expand Up @@ -799,6 +800,49 @@ private void installMessageHandlers() {
notifyMessageHandlers(envelope);
};
connection.addSigHandler(Signal.MessageReceivedV2.class, signal, this.dbusMsgHandler);
this.dbusEditMsgHandler = messageReceived -> {
final var extras = messageReceived.getExtras();
final var envelope = new MessageEnvelope(Optional.of(new RecipientAddress(null,
messageReceived.getSender())),
0,
messageReceived.getTimestamp(),
0,
0,
false,
Optional.empty(),
Optional.empty(),
Optional.empty(),
Optional.of(new MessageEnvelope.Edit(messageReceived.getTargetSentTimestamp(),
new MessageEnvelope.Data(messageReceived.getTimestamp(),
messageReceived.getGroupId().length > 0
? Optional.of(new MessageEnvelope.Data.GroupContext(GroupId.unknownVersion(
messageReceived.getGroupId()), false, 0))
: Optional.empty(),
Optional.empty(),
Optional.empty(),
Optional.of(messageReceived.getMessage()),
0,
false,
false,
false,
false,
false,
Optional.empty(),
Optional.empty(),
Optional.empty(),
getAttachments(extras),
Optional.empty(),
Optional.empty(),
List.of(),
List.of(),
List.of(),
List.of()))),
Optional.empty(),
Optional.empty(),
Optional.empty());
notifyMessageHandlers(envelope);
};
connection.addSigHandler(Signal.EditMessageReceived.class, signal, this.dbusEditMsgHandler);

this.dbusRcptHandler = receiptReceived -> {
final var type = switch (receiptReceived.getReceiptType()) {
Expand Down Expand Up @@ -901,6 +945,7 @@ private void uninstallMessageHandlers() {
try {
signal.unsubscribeReceive();
connection.removeSigHandler(Signal.MessageReceivedV2.class, signal, this.dbusMsgHandler);
connection.removeSigHandler(Signal.EditMessageReceived.class, signal, this.dbusEditMsgHandler);
connection.removeSigHandler(Signal.ReceiptReceivedV2.class, signal, this.dbusRcptHandler);
connection.removeSigHandler(Signal.SyncMessageReceivedV2.class, signal, this.dbusSyncHandler);
} catch (DBusException e) {
Expand Down
21 changes: 21 additions & 0 deletions src/main/java/org/asamk/signal/dbus/DbusReceiveMessageHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,27 @@ private void sendDbusMessages(MessageEnvelope envelope) throws DBusException {
getMessageExtras(message)));
}
}
if (envelope.edit().isPresent()) {
var editMessage = envelope.edit().get();
var message = editMessage.dataMessage();

var groupId = message.groupContext()
.map(MessageEnvelope.Data.GroupContext::groupId)
.map(GroupId::serialize)
.orElseGet(() -> new byte[0]);
var isGroupUpdate = message.groupContext()
.map(MessageEnvelope.Data.GroupContext::isGroupUpdate)
.orElse(false);
if (!message.isEndSession() && !isGroupUpdate) {
conn.sendMessage(new Signal.EditMessageReceived(objectPath,
message.timestamp(),
editMessage.targetSentTimestamp(),
senderString,
groupId,
message.body().orElse(""),
getMessageExtras(message)));
}
}
if (envelope.sync().isPresent()) {
var syncMessage = envelope.sync().get();
if (syncMessage.sent().isPresent()) {
Expand Down

0 comments on commit a66dd0d

Please sign in to comment.