Map text & media group messages from secondary deivces to their primary device

This commit is contained in:
Mikunj 2020-02-04 10:25:46 +11:00
parent cc369f5c52
commit db9f26d9df
2 changed files with 18 additions and 6 deletions

View File

@ -70,6 +70,7 @@ public class GroupMessageProcessor {
String id = GroupUtil.getEncodedId(group);
Optional<GroupRecord> record = database.getGroup(id);
// TODO: Allow processing messages from secondary devices
if (record.isPresent() && group.getType() == Type.UPDATE) {
return handleGroupUpdate(context, content, group, record.get(), outgoing);
} else if (!record.isPresent() && group.getType() == Type.UPDATE) {
@ -230,8 +231,9 @@ public class GroupMessageProcessor {
GroupContext.Builder builder = createGroupContext(group);
builder.setType(GroupContext.Type.QUIT);
if (members.contains(Address.fromExternal(context, content.getSender()))) {
database.remove(id, Address.fromExternal(context, content.getSender()));
String hexEncodedPublicKey = getMasterHexEncodedPublicKey(context, content.getSender());
if (members.contains(Address.fromExternal(context, hexEncodedPublicKey))) {
database.remove(id, Address.fromExternal(context, hexEncodedPublicKey));
if (outgoing) database.setActive(id, false);
return storeMessage(context, content, group, builder.build(), outgoing);

View File

@ -851,8 +851,13 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
Optional<List<LinkPreview>> linkPreviews = getLinkPreviews(message.getPreviews(), message.getBody().or(""));
Optional<Attachment> sticker = getStickerAttachment(message.getSticker());
// If message is from group then we need to map it to the correct sender
Address sender = message.isGroupMessage() ? Address.fromSerialized(content.getSender()) : primaryDeviceRecipient.getAddress();
Address sender = primaryDeviceRecipient.getAddress();
// If message is from group then we need to map it to get the sender of the message
if (message.isGroupMessage()) {
sender = getPrimaryDeviceRecipient(content.getSender()).getAddress();
}
IncomingMediaMessage mediaMessage = new IncomingMediaMessage(sender, message.getTimestamp(), -1,
message.getExpiresInSeconds() * 1000L, false, content.isNeedsReceipt(), message.getBody(), message.getGroupInfo(), message.getAttachments(),
quote, sharedContacts, linkPreviews, sticker);
@ -1036,8 +1041,13 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
} else {
notifyTypingStoppedFromIncomingMessage(primaryDeviceRecipient, content.getSender(), content.getSenderDevice());
// If message is from group then we need to map it to the correct sender
Address sender = message.isGroupMessage() ? Address.fromSerialized(content.getSender()) : primaryDeviceRecipient.getAddress();
Address sender = primaryDeviceRecipient.getAddress();
// If message is from group then we need to map it to get the sender of the message
if (message.isGroupMessage()) {
sender = getPrimaryDeviceRecipient(content.getSender()).getAddress();
}
IncomingTextMessage _textMessage = new IncomingTextMessage(sender,
content.getSenderDevice(),
message.getTimestamp(), body,