Map any incoming group messages from slave devices to master devices.
Closed groups should only have master devices in them.
This commit is contained in:
parent
ecc40368cb
commit
efc2988576
|
@ -1402,6 +1402,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
NSString *hexEncodedPublicKey = ([LKDatabaseUtilities getMasterHexEncodedPublicKeyFor:envelope.source in:transaction] ?: envelope.source);
|
||||
|
||||
// Group messages create the group if it doesn't already exist.
|
||||
//
|
||||
|
@ -1411,17 +1413,15 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
// Loki: Try to figure out removed members
|
||||
removedMemberIds = [NSMutableSet setWithArray:oldGroupThread.groupModel.groupMemberIds];
|
||||
[removedMemberIds minusSet:newMemberIds];
|
||||
[removedMemberIds removeObject:envelope.source];
|
||||
[removedMemberIds removeObject:hexEncodedPublicKey];
|
||||
}
|
||||
|
||||
NSString *hexEncodedPublicKey = ([LKDatabaseUtilities getMasterHexEncodedPublicKeyFor:envelope.source in:transaction] ?: envelope.source);
|
||||
|
||||
// Only set the display name here, the logic for updating profile pictures is handled when we're setting profile key
|
||||
[self handleProfileNameUpdateIfNeeded:dataMessage recipientId:hexEncodedPublicKey transaction:transaction];
|
||||
|
||||
switch (dataMessage.group.type) {
|
||||
case SSKProtoGroupContextTypeUpdate: {
|
||||
if (oldGroupThread && ![oldGroupThread.groupModel.groupAdminIds containsObject:envelope.source]) {
|
||||
if (oldGroupThread && ![oldGroupThread.groupModel.groupAdminIds containsObject:hexEncodedPublicKey]) {
|
||||
[LKLogger print:[NSString stringWithFormat:@"[Loki] Received a group update from a non-admin user for %@; ignoring.", [LKGroupUtilities getEncodedGroupID:groupId]]];
|
||||
return nil;
|
||||
}
|
||||
|
@ -1464,12 +1464,12 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
OWSLogWarn(@"ignoring quit group message from unknown group.");
|
||||
return nil;
|
||||
}
|
||||
[newMemberIds removeObject:envelope.source];
|
||||
[newMemberIds removeObject:hexEncodedPublicKey];
|
||||
oldGroupThread.groupModel.groupMemberIds = [newMemberIds.allObjects mutableCopy];
|
||||
[oldGroupThread saveWithTransaction:transaction];
|
||||
|
||||
NSString *nameString =
|
||||
[self.contactsManager displayNameForPhoneIdentifier:envelope.source transaction:transaction];
|
||||
[self.contactsManager displayNameForPhoneIdentifier:hexEncodedPublicKey transaction:transaction];
|
||||
NSString *updateGroupInfo =
|
||||
[NSString stringWithFormat:NSLocalizedString(@"GROUP_MEMBER_LEFT", @""), nameString];
|
||||
// MJK TODO - should be safe to remove senderTimestamp
|
||||
|
@ -1487,7 +1487,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
[[OWSDisappearingMessagesJob sharedJob] becomeConsistentWithDisappearingDuration:dataMessage.expireTimer
|
||||
thread:oldGroupThread
|
||||
createdByRemoteRecipientId:envelope.source
|
||||
createdByRemoteRecipientId:hexEncodedPublicKey
|
||||
createdInExistingGroup:NO
|
||||
transaction:transaction];
|
||||
|
||||
|
@ -1514,7 +1514,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
TSIncomingMessage *incomingMessage =
|
||||
[[TSIncomingMessage alloc] initIncomingMessageWithTimestamp:timestamp
|
||||
inThread:oldGroupThread
|
||||
authorId:envelope.source
|
||||
authorId:hexEncodedPublicKey
|
||||
sourceDeviceId:envelope.sourceDevice
|
||||
messageBody:body
|
||||
attachmentIds:@[]
|
||||
|
@ -1540,7 +1540,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
// Loki: Don't process friend requests in group chats
|
||||
if (body.length == 0 && attachmentPointers.count < 1 && !contact) {
|
||||
OWSLogWarn(@"ignoring empty incoming message from: %@ for group: %@ with timestamp: %lu",
|
||||
envelopeAddress(envelope),
|
||||
hexEncodedPublicKey,
|
||||
groupId,
|
||||
(unsigned long)timestamp);
|
||||
return nil;
|
||||
|
|
Loading…
Reference in New Issue