Implement EditMessageReceived signal for dbus

This commit is contained in:
AsamK 2023-10-10 20:21:40 +02:00
parent 7b5b5776f0
commit a66dd0dc79
4 changed files with 124 additions and 1 deletions

View file

@ -235,6 +235,58 @@ public interface Signal extends DBusInterface {
}
}
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;

View file

@ -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;
@ -799,6 +800,49 @@ public class DbusManagerImpl implements Manager {
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()) {
@ -901,6 +945,7 @@ public class DbusManagerImpl implements Manager {
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) {

View file

@ -74,6 +74,27 @@ public class DbusReceiveMessageHandler implements Manager.ReceiveMessageHandler
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()) {