enable leaving a closed group with linked device synced

pull/104/head
Ryan ZHAO 6 years ago
parent 171c2341b8
commit d5c4939a45

@ -28,6 +28,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, readonly) uint64_t expirationStartedAt;
@property (nonatomic, readonly) uint32_t expirationDuration;
@property (nonatomic, readonly) BOOL isGroupUpdate;
@property (nonatomic, readonly) BOOL isGroupQuit;
@property (nonatomic, readonly) BOOL isExpirationTimerUpdate;
@property (nonatomic, readonly) BOOL isEndSessionMessage;
@property (nonatomic, readonly, nullable) NSData *groupId;

@ -34,6 +34,7 @@ NS_ASSUME_NONNULL_BEGIN
_body = _dataMessage.body;
_groupId = _dataMessage.group.id;
_isGroupUpdate = _dataMessage.group != nil && (_dataMessage.group.type == SSKProtoGroupContextTypeUpdate);
_isGroupQuit = _dataMessage.group != nil && (_dataMessage.group.type == SSKProtoGroupContextTypeQuit);
_isExpirationTimerUpdate = (_dataMessage.flags & SSKProtoDataMessageFlagsExpirationTimerUpdate) != 0;
_isEndSessionMessage = (_dataMessage.flags & SSKProtoDataMessageFlagsEndSession) != 0;
_isRecipientUpdate = sentProto.isRecipientUpdate;

@ -1014,6 +1014,14 @@ NS_ASSUME_NONNULL_BEGIN
messageType:TSInfoMessageTypeGroupUpdate
customMessage:updateMessage];
[infoMessage saveWithTransaction:transaction];
} else if (transcript.isGroupQuit) {
TSGroupThread *groupThread = [TSGroupThread getOrCreateThreadWithGroupId:transcript.dataMessage.group.id groupType:closedGroup transaction:transaction];
[groupThread leaveGroupWithTransaction:transaction];
TSInfoMessage *infoMessage = [[TSInfoMessage alloc] initWithTimestamp:NSDate.ows_millisecondTimeStamp
inThread:groupThread
messageType:TSInfoMessageTypeGroupQuit
customMessage:NSLocalizedString(@"GROUP_YOU_LEFT", nil)];
[infoMessage saveWithTransaction:transaction];
} else {
[OWSRecordTranscriptJob
processIncomingSentMessageTranscript:transcript
@ -1108,14 +1116,12 @@ NS_ASSUME_NONNULL_BEGIN
GroupParser *parser = [[GroupParser alloc] initWithData:data];
NSArray<TSGroupModel *> *groupModels = [parser parseGroupModels];
for (TSGroupModel *groupModel in groupModels) {
NSMutableSet *members = [NSMutableSet setWithArray:groupModel.groupMemberIds];
NSMutableSet *admins = [NSMutableSet setWithArray:groupModel.groupAdminIds];
[members addObject:userHexEncodedPublicKey];
if ([admins containsObject:masterHexEncodedPublicKey]) {
[admins addObject:userHexEncodedPublicKey];
}
TSGroupModel *newGroupModel = [[TSGroupModel alloc] initWithTitle:groupModel.groupName
memberIds:members.allObjects
memberIds:groupModel.groupMemberIds
image:groupModel.groupImage
groupId:groupModel.groupId
groupType:groupModel.groupType
@ -1132,7 +1138,7 @@ NS_ASSUME_NONNULL_BEGIN
[messageSender sendMessage:message
success:^{
OWSLogDebug(@"Successfully sent group update for group sync");
[self establishSessionsWithMembersIfNeeded:members.allObjects forThread:thread transaction:transaction];
[self establishSessionsWithMembersIfNeeded:groupModel.groupMemberIds forThread:thread transaction:transaction];
}
failure:^(NSError *error) {
OWSLogError(@"Failed to send group update for group sync with error: %@", error);

Loading…
Cancel
Save