| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1014,6 +1014,14 @@ NS_ASSUME_NONNULL_BEGIN
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                                                          messageType:TSInfoMessageTypeGroupUpdate
 | 
					 | 
					 | 
					 | 
					                                                                          messageType:TSInfoMessageTypeGroupUpdate
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                                                        customMessage:updateMessage];
 | 
					 | 
					 | 
					 | 
					                                                                        customMessage:updateMessage];
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                [infoMessage saveWithTransaction:transaction];
 | 
					 | 
					 | 
					 | 
					                [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 {
 | 
					 | 
					 | 
					 | 
					            } else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                [OWSRecordTranscriptJob
 | 
					 | 
					 | 
					 | 
					                [OWSRecordTranscriptJob
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                 processIncomingSentMessageTranscript:transcript
 | 
					 | 
					 | 
					 | 
					                 processIncomingSentMessageTranscript:transcript
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1108,14 +1116,12 @@ NS_ASSUME_NONNULL_BEGIN
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            GroupParser *parser = [[GroupParser alloc] initWithData:data];
 | 
					 | 
					 | 
					 | 
					            GroupParser *parser = [[GroupParser alloc] initWithData:data];
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            NSArray<TSGroupModel *> *groupModels = [parser parseGroupModels];
 | 
					 | 
					 | 
					 | 
					            NSArray<TSGroupModel *> *groupModels = [parser parseGroupModels];
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            for (TSGroupModel *groupModel in groupModels) {
 | 
					 | 
					 | 
					 | 
					            for (TSGroupModel *groupModel in groupModels) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                NSMutableSet *members = [NSMutableSet setWithArray:groupModel.groupMemberIds];
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                NSMutableSet *admins = [NSMutableSet setWithArray:groupModel.groupAdminIds];
 | 
					 | 
					 | 
					 | 
					                NSMutableSet *admins = [NSMutableSet setWithArray:groupModel.groupAdminIds];
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                [members addObject:userHexEncodedPublicKey];
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                if ([admins containsObject:masterHexEncodedPublicKey]) {
 | 
					 | 
					 | 
					 | 
					                if ([admins containsObject:masterHexEncodedPublicKey]) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    [admins addObject:userHexEncodedPublicKey];
 | 
					 | 
					 | 
					 | 
					                    [admins addObject:userHexEncodedPublicKey];
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                }
 | 
					 | 
					 | 
					 | 
					                }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                TSGroupModel *newGroupModel = [[TSGroupModel alloc] initWithTitle:groupModel.groupName
 | 
					 | 
					 | 
					 | 
					                TSGroupModel *newGroupModel = [[TSGroupModel alloc] initWithTitle:groupModel.groupName
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                                                        memberIds:members.allObjects
 | 
					 | 
					 | 
					 | 
					                                                                        memberIds:groupModel.groupMemberIds
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                                                            image:groupModel.groupImage
 | 
					 | 
					 | 
					 | 
					                                                                            image:groupModel.groupImage
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                                                          groupId:groupModel.groupId
 | 
					 | 
					 | 
					 | 
					                                                                          groupId:groupModel.groupId
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                                                        groupType:groupModel.groupType
 | 
					 | 
					 | 
					 | 
					                                                                        groupType:groupModel.groupType
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -1132,7 +1138,7 @@ NS_ASSUME_NONNULL_BEGIN
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                [messageSender sendMessage:message
 | 
					 | 
					 | 
					 | 
					                [messageSender sendMessage:message
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                success:^{
 | 
					 | 
					 | 
					 | 
					                success:^{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    OWSLogDebug(@"Successfully sent group update for group sync");
 | 
					 | 
					 | 
					 | 
					                    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) {
 | 
					 | 
					 | 
					 | 
					                failure:^(NSError *error) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    OWSLogError(@"Failed to send group update for group sync with error: %@", error);
 | 
					 | 
					 | 
					 | 
					                    OWSLogError(@"Failed to send group update for group sync with error: %@", error);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |