|  |  |  | @ -67,6 +67,8 @@ NS_ASSUME_NONNULL_BEGIN | 
		
	
		
			
				|  |  |  |  |              [DebugUIMessages fakeRandomTextAction:thread], | 
		
	
		
			
				|  |  |  |  |              // Sequences | 
		
	
		
			
				|  |  |  |  |              [DebugUIMessages allFakeSequencesAction:thread], | 
		
	
		
			
				|  |  |  |  |              // Quoted Replies | 
		
	
		
			
				|  |  |  |  |              [DebugUIMessages allQuotedReplyAction:thread], | 
		
	
		
			
				|  |  |  |  |              // Exemplary | 
		
	
		
			
				|  |  |  |  |              [DebugUIMessages allFakeAction:thread], | 
		
	
		
			
				|  |  |  |  |          ]) { | 
		
	
	
		
			
				
					|  |  |  | @ -1864,7 +1866,6 @@ NS_ASSUME_NONNULL_BEGIN | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | #pragma mark - Fake Quoted Replies | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | //+ (DebugUIMessagesAction *)fakeIncomingQuotedReplyToIncomingAction:(TSThread *)thread | 
		
	
		
			
				|  |  |  |  | + (DebugUIMessagesAction *) | 
		
	
		
			
				|  |  |  |  |               fakeQuotedReplyAction:(TSThread *)thread | 
		
	
		
			
				|  |  |  |  |                  quotedMessageLabel:(NSString *)quotedMessageLabel | 
		
	
	
		
			
				
					|  |  |  | @ -1887,29 +1888,12 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  |                         // Only applies if !isReplyIncoming. | 
		
	
		
			
				|  |  |  |  |                         replyIsRead:(BOOL)replyIsRead | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     // fakeAssetLoader:[DebugUIMessagesAssetLoader jpegInstance] | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     OWSAssert(thread); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     // Only applies if !isQuotedMessageIncoming. | 
		
	
		
			
				|  |  |  |  |     BOOL quotedMessageIsDelivered = NO; | 
		
	
		
			
				|  |  |  |  |     BOOL quotedMessageIsRead = NO; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     //    NSString *_Nullable quotedMessageBody = [quotedMessageBodyParam ] | 
		
	
		
			
				|  |  |  |  |     //    NSString *messageBody = nil; | 
		
	
		
			
				|  |  |  |  |     //    if (hasCaption) { | 
		
	
		
			
				|  |  |  |  |     //        // We want a message body that is "more than one line on all devices, | 
		
	
		
			
				|  |  |  |  |     //        // using all dynamic type sizes." | 
		
	
		
			
				|  |  |  |  |     //        NSString *sampleText = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit | 
		
	
		
			
				|  |  |  |  |     //        amet, " | 
		
	
		
			
				|  |  |  |  |     //        @"consectetur adipiscing elit."; | 
		
	
		
			
				|  |  |  |  |     //        messageBody = [[label stringByAppendingString:@" "] stringByAppendingString:sampleText]; | 
		
	
		
			
				|  |  |  |  |     // | 
		
	
		
			
				|  |  |  |  |     //        messageBody = [messageBody stringByAppendingString:@" 🔤"]; | 
		
	
		
			
				|  |  |  |  |     //    } | 
		
	
		
			
				|  |  |  |  |     //    attachment.captionText = messageBody; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     NSMutableString *label = [NSMutableString new]; | 
		
	
		
			
				|  |  |  |  |     [label appendString:@"Quoted Reply ("]; | 
		
	
		
			
				|  |  |  |  |     [label appendString:replyLabel]; | 
		
	
	
		
			
				
					|  |  |  | @ -1937,24 +1921,6 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     [label appendString:@")"]; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     //    NSString *label = labelParam; | 
		
	
		
			
				|  |  |  |  |     //    if (hasCaption) { | 
		
	
		
			
				|  |  |  |  |     //        label = [label stringByAppendingString:@" 🔤"]; | 
		
	
		
			
				|  |  |  |  |     //    } | 
		
	
		
			
				|  |  |  |  |     //    if (messageState == TSOutgoingMessageStateUnsent) { | 
		
	
		
			
				|  |  |  |  |     //        label = [label stringByAppendingString:@" (Unsent)"]; | 
		
	
		
			
				|  |  |  |  |     //    } else if (messageState == TSOutgoingMessageStateAttemptingOut) { | 
		
	
		
			
				|  |  |  |  |     //        label = [label stringByAppendingString:@" (Sending)"]; | 
		
	
		
			
				|  |  |  |  |     //    } else if (messageState == TSOutgoingMessageStateSentToService) { | 
		
	
		
			
				|  |  |  |  |     //        label = [label stringByAppendingString:@" (Sent)"]; | 
		
	
		
			
				|  |  |  |  |     //    } else { | 
		
	
		
			
				|  |  |  |  |     //        OWSFail(@"%@ unknown message state.", self.logTag) | 
		
	
		
			
				|  |  |  |  |     //    } | 
		
	
		
			
				|  |  |  |  |     //    replyLabel = [replyLabel stringByAppendingString:[self actionLabelForHasCaption:NO | 
		
	
		
			
				|  |  |  |  |     //                                                     outgoingMessageState:messageState | 
		
	
		
			
				|  |  |  |  |     //                                                              isDelivered:isDelivered | 
		
	
		
			
				|  |  |  |  |     //                                                                   isRead:isRead]]; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     return [DebugUIMessagesSingleAction | 
		
	
		
			
				|  |  |  |  |                actionWithLabel:label | 
		
	
		
			
				|  |  |  |  |         unstaggeredActionBlock:^(NSUInteger index, YapDatabaseReadWriteTransaction *transaction) { | 
		
	
	
		
			
				
					|  |  |  | @ -1967,30 +1933,6 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  |                                           isAttachmentDownloaded:isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  |                                                    quotedMessage:nil | 
		
	
		
			
				|  |  |  |  |                                                      transaction:transaction]; | 
		
	
		
			
				|  |  |  |  |                 //                    if (quotedMessageAssetLoader) { | 
		
	
		
			
				|  |  |  |  |                 //                        // Attachment, w/ or w/o caption. | 
		
	
		
			
				|  |  |  |  |                 //                        messageToQuote = | 
		
	
		
			
				|  |  |  |  |                 //                        [self createFakeIncomingMedia:index | 
		
	
		
			
				|  |  |  |  |                 //                               isAttachmentDownloaded:isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  |                 //                                              caption:quotedMessageBody | 
		
	
		
			
				|  |  |  |  |                 //                                      fakeAssetLoader:quotedMessageAssetLoader | 
		
	
		
			
				|  |  |  |  |                 //                                               thread:thread | 
		
	
		
			
				|  |  |  |  |                 //                                          transaction:transaction]; | 
		
	
		
			
				|  |  |  |  |                 //                    } else { | 
		
	
		
			
				|  |  |  |  |                 //                        // Text-only | 
		
	
		
			
				|  |  |  |  |                 //                        messageToQuote = | 
		
	
		
			
				|  |  |  |  |                 //                        [[TSIncomingMessage alloc] initIncomingMessageWithTimestamp:[NSDate | 
		
	
		
			
				|  |  |  |  |                 //                        ows_millisecondTimeStamp] | 
		
	
		
			
				|  |  |  |  |                 //                                                                           inThread:thread | 
		
	
		
			
				|  |  |  |  |                 //                                                                           authorId:@"+19174054215" | 
		
	
		
			
				|  |  |  |  |                 //                                                                     sourceDeviceId:0 | 
		
	
		
			
				|  |  |  |  |                 //                                                                        messageBody:quotedMessageBody | 
		
	
		
			
				|  |  |  |  |                 //                                                                      attachmentIds:@[] | 
		
	
		
			
				|  |  |  |  |                 //                                                                   expiresInSeconds:0 | 
		
	
		
			
				|  |  |  |  |                 //                                                                      quotedMessage:nil]; | 
		
	
		
			
				|  |  |  |  |                 //                        [messageToQuote markAsReadWithTransaction:transaction sendReadReceipt:NO | 
		
	
		
			
				|  |  |  |  |                 //                        updateExpiration:NO]; | 
		
	
		
			
				|  |  |  |  |                 //                    } | 
		
	
		
			
				|  |  |  |  |                 quotedMessage = | 
		
	
		
			
				|  |  |  |  |                     [OWSMessageUtils quotedMessageForIncomingMessage:messageToQuote transaction:transaction]; | 
		
	
		
			
				|  |  |  |  |             } else { | 
		
	
	
		
			
				
					|  |  |  | @ -2007,14 +1949,6 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |             OWSAssert(quotedMessage); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             //            isReplyIncoming:(BOOL)isReplyIncoming | 
		
	
		
			
				|  |  |  |  |             //            replyMessageBody:(NSString *)replyMessageBody | 
		
	
		
			
				|  |  |  |  |             //                // Only applies if !isReplyIncoming. | 
		
	
		
			
				|  |  |  |  |             //            replyMessageState:(TSOutgoingMessageState)replyMessageState | 
		
	
		
			
				|  |  |  |  |             //                // Only applies if !isReplyIncoming. | 
		
	
		
			
				|  |  |  |  |             //            replyIsDelivered:(BOOL)replyIsDelivered | 
		
	
		
			
				|  |  |  |  |             //                // Only applies if !isReplyIncoming. | 
		
	
		
			
				|  |  |  |  |             //            replyIsRead:(BOOL)replyIsRead | 
		
	
		
			
				|  |  |  |  |             if (isReplyIncoming) { | 
		
	
		
			
				|  |  |  |  |                 [self createFakeIncomingMessage:thread | 
		
	
		
			
				|  |  |  |  |                                     messageBody:replyMessageBody | 
		
	
	
		
			
				
					|  |  |  | @ -2032,23 +1966,6 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  |                                   quotedMessage:quotedMessage | 
		
	
		
			
				|  |  |  |  |                                     transaction:transaction]; | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             //                NSString *replyText = [@"Some reply: " stringByAppendingString:[self randomText]]; | 
		
	
		
			
				|  |  |  |  |             //                TSOutgoingMessage *replyMessage = | 
		
	
		
			
				|  |  |  |  |             //                [[TSOutgoingMessage alloc] initOutgoingMessageWithTimestamp:[NSDate | 
		
	
		
			
				|  |  |  |  |             //                ows_millisecondTimeStamp] | 
		
	
		
			
				|  |  |  |  |             //                                                                   inThread:thread | 
		
	
		
			
				|  |  |  |  |             //                                                                messageBody:replyText | 
		
	
		
			
				|  |  |  |  |             //                                                              attachmentIds:[NSMutableArray new] | 
		
	
		
			
				|  |  |  |  |             //                                                           expiresInSeconds:0 | 
		
	
		
			
				|  |  |  |  |             //                                                            expireStartedAt:0 | 
		
	
		
			
				|  |  |  |  |             //                                                             isVoiceMessage:NO | 
		
	
		
			
				|  |  |  |  |             //                                                           groupMetaMessage:TSGroupMessageNone | 
		
	
		
			
				|  |  |  |  |             //                                                              quotedMessage:quotedMessage]; | 
		
	
		
			
				|  |  |  |  |             //                [replyMessage saveWithTransaction:transaction]; | 
		
	
		
			
				|  |  |  |  |             //                [replyMessage updateWithMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |             //                transaction:transaction]; | 
		
	
		
			
				|  |  |  |  |         }]; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -2056,6 +1973,11 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     OWSAssert(thread); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     NSString *shortText = @"Lorem ipsum"; | 
		
	
		
			
				|  |  |  |  |     NSString *mediumText = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, " | 
		
	
		
			
				|  |  |  |  |                            @"consectetur adipiscing elit."; | 
		
	
		
			
				|  |  |  |  |     NSString *longText = [self randomOversizeText]; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     //    NSArray<NSString *> *messageBodies = @[ | 
		
	
		
			
				|  |  |  |  |     //                                           @"Hi", | 
		
	
		
			
				|  |  |  |  |     //                                           @"1️⃣", | 
		
	
	
		
			
				
					|  |  |  | @ -2069,25 +1991,275 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     if (includeLabels) { | 
		
	
		
			
				|  |  |  |  |         [actions addObject:[self fakeIncomingTextMessageAction:thread | 
		
	
		
			
				|  |  |  |  |                                                           text:@"⚠️ Incoming Quoted Reply To Incoming ⚠️"]]; | 
		
	
		
			
				|  |  |  |  |                                                           text:@"⚠️ Quoted Replies (Message Lengths) ⚠️"]]; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     //    [actions addObject:[self fakeShortIncomingTextMessageAction:thread]]; | 
		
	
		
			
				|  |  |  |  |     [actions addObjectsFromArray:@[ | 
		
	
		
			
				|  |  |  |  |         [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                              quotedMessageLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                         isQuotedMessageIncoming:YES | 
		
	
		
			
				|  |  |  |  |                               quotedMessageBody:@"lorem" | 
		
	
		
			
				|  |  |  |  |                         isQuotedMessageIncoming:NO | 
		
	
		
			
				|  |  |  |  |                               quotedMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                        quotedMessageAssetLoader:nil | 
		
	
		
			
				|  |  |  |  |             isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                       quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                      replyLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                                 isReplyIncoming:NO | 
		
	
		
			
				|  |  |  |  |                                replyMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                               replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                     replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                              quotedMessageLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                         isQuotedMessageIncoming:NO | 
		
	
		
			
				|  |  |  |  |                               quotedMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                        quotedMessageAssetLoader:nil | 
		
	
		
			
				|  |  |  |  |             isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                       quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                      replyLabel:@"Medium Text" | 
		
	
		
			
				|  |  |  |  |                                 isReplyIncoming:NO | 
		
	
		
			
				|  |  |  |  |                                replyMessageBody:mediumText | 
		
	
		
			
				|  |  |  |  |                               replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                     replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                              quotedMessageLabel:@"Medium Text" | 
		
	
		
			
				|  |  |  |  |                         isQuotedMessageIncoming:NO | 
		
	
		
			
				|  |  |  |  |                               quotedMessageBody:mediumText | 
		
	
		
			
				|  |  |  |  |                        quotedMessageAssetLoader:nil | 
		
	
		
			
				|  |  |  |  |             isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                       quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                      replyLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                                 isReplyIncoming:YES | 
		
	
		
			
				|  |  |  |  |                                replyMessageBody:@"ipsum" | 
		
	
		
			
				|  |  |  |  |                                 isReplyIncoming:NO | 
		
	
		
			
				|  |  |  |  |                                replyMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                               replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                     replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                              quotedMessageLabel:@"Medium Text" | 
		
	
		
			
				|  |  |  |  |                         isQuotedMessageIncoming:NO | 
		
	
		
			
				|  |  |  |  |                               quotedMessageBody:mediumText | 
		
	
		
			
				|  |  |  |  |                        quotedMessageAssetLoader:nil | 
		
	
		
			
				|  |  |  |  |             isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                       quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                      replyLabel:@"Medium Text" | 
		
	
		
			
				|  |  |  |  |                                 isReplyIncoming:NO | 
		
	
		
			
				|  |  |  |  |                                replyMessageBody:mediumText | 
		
	
		
			
				|  |  |  |  |                               replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                     replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                              quotedMessageLabel:@"Long Text" | 
		
	
		
			
				|  |  |  |  |                         isQuotedMessageIncoming:NO | 
		
	
		
			
				|  |  |  |  |                               quotedMessageBody:longText | 
		
	
		
			
				|  |  |  |  |                        quotedMessageAssetLoader:nil | 
		
	
		
			
				|  |  |  |  |             isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                       quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                      replyLabel:@"Long Text" | 
		
	
		
			
				|  |  |  |  |                                 isReplyIncoming:NO | 
		
	
		
			
				|  |  |  |  |                                replyMessageBody:longText | 
		
	
		
			
				|  |  |  |  |                               replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                     replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  |     ]]; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     if (includeLabels) { | 
		
	
		
			
				|  |  |  |  |         [actions addObject:[self fakeIncomingTextMessageAction:thread | 
		
	
		
			
				|  |  |  |  |                                                           text:@"⚠️ Quoted Replies (Attachment Types) ⚠️"]]; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     [actions addObjectsFromArray:@[ | 
		
	
		
			
				|  |  |  |  |         [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                              quotedMessageLabel:@"Jpg" | 
		
	
		
			
				|  |  |  |  |                         isQuotedMessageIncoming:NO | 
		
	
		
			
				|  |  |  |  |                               quotedMessageBody:nil | 
		
	
		
			
				|  |  |  |  |                        quotedMessageAssetLoader:[DebugUIMessagesAssetLoader jpegInstance] | 
		
	
		
			
				|  |  |  |  |             isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                       quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                      replyLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                                 isReplyIncoming:NO | 
		
	
		
			
				|  |  |  |  |                                replyMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                               replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                     replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                              quotedMessageLabel:@"Jpg" | 
		
	
		
			
				|  |  |  |  |                         isQuotedMessageIncoming:NO | 
		
	
		
			
				|  |  |  |  |                               quotedMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                        quotedMessageAssetLoader:[DebugUIMessagesAssetLoader jpegInstance] | 
		
	
		
			
				|  |  |  |  |             isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                       quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                      replyLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                                 isReplyIncoming:NO | 
		
	
		
			
				|  |  |  |  |                                replyMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                               replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                     replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  |     ]]; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     if (includeLabels) { | 
		
	
		
			
				|  |  |  |  |         [actions | 
		
	
		
			
				|  |  |  |  |             addObject:[self fakeIncomingTextMessageAction:thread text:@"⚠️ Quoted Replies (Attachments) ⚠️"]]; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     [actions addObjectsFromArray:@[ | 
		
	
		
			
				|  |  |  |  |         [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                              quotedMessageLabel:@"Jpg" | 
		
	
		
			
				|  |  |  |  |                         isQuotedMessageIncoming:NO | 
		
	
		
			
				|  |  |  |  |                               quotedMessageBody:nil | 
		
	
		
			
				|  |  |  |  |                        quotedMessageAssetLoader:[DebugUIMessagesAssetLoader jpegInstance] | 
		
	
		
			
				|  |  |  |  |             isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                       quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                      replyLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                                 isReplyIncoming:NO | 
		
	
		
			
				|  |  |  |  |                                replyMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                               replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                     replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                              quotedMessageLabel:@"Jpg" | 
		
	
		
			
				|  |  |  |  |                         isQuotedMessageIncoming:NO | 
		
	
		
			
				|  |  |  |  |                               quotedMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                        quotedMessageAssetLoader:[DebugUIMessagesAssetLoader jpegInstance] | 
		
	
		
			
				|  |  |  |  |             isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                       quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                      replyLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                                 isReplyIncoming:NO | 
		
	
		
			
				|  |  |  |  |                                replyMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                               replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                     replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  |     ]]; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     //    [actions addObject:[self fakeShortIncomingTextMessageAction:thread]]; | 
		
	
		
			
				|  |  |  |  |     void (^createActions)(BOOL, BOOL) = ^(BOOL isQuotedMessageIncoming, BOOL isReplyIncoming) { | 
		
	
		
			
				|  |  |  |  |         [actions addObjectsFromArray:@[ | 
		
	
		
			
				|  |  |  |  |             [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                                  quotedMessageLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                             isQuotedMessageIncoming:isQuotedMessageIncoming | 
		
	
		
			
				|  |  |  |  |                                   quotedMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                            quotedMessageAssetLoader:nil | 
		
	
		
			
				|  |  |  |  |                 isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                           quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                          replyLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                                     isReplyIncoming:isReplyIncoming | 
		
	
		
			
				|  |  |  |  |                                    replyMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                                   replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                    replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                         replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                                  quotedMessageLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                             isQuotedMessageIncoming:isQuotedMessageIncoming | 
		
	
		
			
				|  |  |  |  |                                   quotedMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                            quotedMessageAssetLoader:nil | 
		
	
		
			
				|  |  |  |  |                 isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                           quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                          replyLabel:@"Medium Text" | 
		
	
		
			
				|  |  |  |  |                                     isReplyIncoming:isReplyIncoming | 
		
	
		
			
				|  |  |  |  |                                    replyMessageBody:mediumText | 
		
	
		
			
				|  |  |  |  |                                   replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                    replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                         replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                                  quotedMessageLabel:@"Medium Text" | 
		
	
		
			
				|  |  |  |  |                             isQuotedMessageIncoming:isQuotedMessageIncoming | 
		
	
		
			
				|  |  |  |  |                                   quotedMessageBody:mediumText | 
		
	
		
			
				|  |  |  |  |                            quotedMessageAssetLoader:nil | 
		
	
		
			
				|  |  |  |  |                 isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                           quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                          replyLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                                     isReplyIncoming:isReplyIncoming | 
		
	
		
			
				|  |  |  |  |                                    replyMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                                   replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                    replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                         replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                                  quotedMessageLabel:@"Medium Text" | 
		
	
		
			
				|  |  |  |  |                             isQuotedMessageIncoming:isQuotedMessageIncoming | 
		
	
		
			
				|  |  |  |  |                                   quotedMessageBody:mediumText | 
		
	
		
			
				|  |  |  |  |                            quotedMessageAssetLoader:nil | 
		
	
		
			
				|  |  |  |  |                 isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                           quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                          replyLabel:@"Medium Text" | 
		
	
		
			
				|  |  |  |  |                                     isReplyIncoming:isReplyIncoming | 
		
	
		
			
				|  |  |  |  |                                    replyMessageBody:mediumText | 
		
	
		
			
				|  |  |  |  |                                   replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                    replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                         replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                                  quotedMessageLabel:@"Long Text" | 
		
	
		
			
				|  |  |  |  |                             isQuotedMessageIncoming:isQuotedMessageIncoming | 
		
	
		
			
				|  |  |  |  |                                   quotedMessageBody:longText | 
		
	
		
			
				|  |  |  |  |                            quotedMessageAssetLoader:nil | 
		
	
		
			
				|  |  |  |  |                 isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                           quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                          replyLabel:@"Long Text" | 
		
	
		
			
				|  |  |  |  |                                     isReplyIncoming:isReplyIncoming | 
		
	
		
			
				|  |  |  |  |                                    replyMessageBody:longText | 
		
	
		
			
				|  |  |  |  |                                   replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                    replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                         replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             // Attachments | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                                  quotedMessageLabel:@"Jpg" | 
		
	
		
			
				|  |  |  |  |                             isQuotedMessageIncoming:isQuotedMessageIncoming | 
		
	
		
			
				|  |  |  |  |                                   quotedMessageBody:nil | 
		
	
		
			
				|  |  |  |  |                            quotedMessageAssetLoader:[DebugUIMessagesAssetLoader compactPortraitPngInstance] | 
		
	
		
			
				|  |  |  |  |                 isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                           quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                          replyLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                                     isReplyIncoming:isReplyIncoming | 
		
	
		
			
				|  |  |  |  |                                    replyMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                                   replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                    replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                         replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             [self fakeQuotedReplyAction:thread | 
		
	
		
			
				|  |  |  |  |                                  quotedMessageLabel:@"Jpg" | 
		
	
		
			
				|  |  |  |  |                             isQuotedMessageIncoming:isQuotedMessageIncoming | 
		
	
		
			
				|  |  |  |  |                                   quotedMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                            quotedMessageAssetLoader:[DebugUIMessagesAssetLoader jpegInstance] | 
		
	
		
			
				|  |  |  |  |                 isQuotedMessageAttachmentDownloaded:NO | 
		
	
		
			
				|  |  |  |  |                           quotedMessageMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                          replyLabel:@"Short Text" | 
		
	
		
			
				|  |  |  |  |                                     isReplyIncoming:isReplyIncoming | 
		
	
		
			
				|  |  |  |  |                                    replyMessageBody:shortText | 
		
	
		
			
				|  |  |  |  |                                   replyMessageState:TSOutgoingMessageStateUnsent | 
		
	
		
			
				|  |  |  |  |                                    replyIsDelivered:NO | 
		
	
		
			
				|  |  |  |  |                                         replyIsRead:NO], | 
		
	
		
			
				|  |  |  |  |         ]]; | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     if (includeLabels) { | 
		
	
		
			
				|  |  |  |  |         [actions addObject:[self fakeIncomingTextMessageAction:thread | 
		
	
		
			
				|  |  |  |  |                                                           text:@"⚠️ Quoted Replies (Outgoing to Outgoing) ⚠️"]]; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     createActions(NO, NO); | 
		
	
		
			
				|  |  |  |  |     if (includeLabels) { | 
		
	
		
			
				|  |  |  |  |         [actions addObject:[self fakeIncomingTextMessageAction:thread | 
		
	
		
			
				|  |  |  |  |                                                           text:@"⚠️ Quoted Replies (Incoming to Outgoing) ⚠️"]]; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     createActions(YES, NO); | 
		
	
		
			
				|  |  |  |  |     if (includeLabels) { | 
		
	
		
			
				|  |  |  |  |         [actions addObject:[self fakeIncomingTextMessageAction:thread | 
		
	
		
			
				|  |  |  |  |                                                           text:@"⚠️ Quoted Replies (Outgoing to Incoming) ⚠️"]]; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     createActions(NO, YES); | 
		
	
		
			
				|  |  |  |  |     if (includeLabels) { | 
		
	
		
			
				|  |  |  |  |         [actions addObject:[self fakeIncomingTextMessageAction:thread | 
		
	
		
			
				|  |  |  |  |                                                           text:@"⚠️ Quoted Replies (Incoming to Incoming) ⚠️"]]; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     createActions(YES, YES); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     //    for (NSString *messageBody in messageBodies) { | 
		
	
		
			
				|  |  |  |  |     //        [actions addObject:[self fakeIncomingTextMessageAction:thread text:messageBody]]; | 
		
	
		
			
				|  |  |  |  |     //    } | 
		
	
	
		
			
				
					|  |  |  | @ -2328,9 +2500,8 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | #pragma mark - | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | + (void)sendOversizeTextMessage:(TSThread *)thread | 
		
	
		
			
				|  |  |  |  | + (NSString *)randomOversizeText | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     OWSMessageSender *messageSender = [Environment current].messageSender; | 
		
	
		
			
				|  |  |  |  |     NSMutableString *message = [NSMutableString new]; | 
		
	
		
			
				|  |  |  |  |     for (NSUInteger i = 0; i < 32; i++) { | 
		
	
		
			
				|  |  |  |  |         [message appendString:@"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse rutrum, nulla " | 
		
	
	
		
			
				
					|  |  |  | @ -2345,7 +2516,13 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  |                               @"congue facilisis. Nullam aliquet dapibus ligula ac mollis. Etiam sit amet posuere " | 
		
	
		
			
				|  |  |  |  |                               @"lorem, in rhoncus nisi.\n\n"]; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return message; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | + (void)sendOversizeTextMessage:(TSThread *)thread | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     OWSMessageSender *messageSender = [Environment current].messageSender; | 
		
	
		
			
				|  |  |  |  |     NSString *message = [self randomOversizeText]; | 
		
	
		
			
				|  |  |  |  |     DataSource *_Nullable dataSource = [DataSourceValue dataSourceWithOversizeText:message]; | 
		
	
		
			
				|  |  |  |  |     SignalAttachment *attachment = | 
		
	
		
			
				|  |  |  |  |         [SignalAttachment attachmentWithDataSource:dataSource dataUTI:kOversizeTextAttachmentUTI]; | 
		
	
	
		
			
				
					|  |  |  | @ -3386,7 +3563,6 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  |                                      transaction:(YapDatabaseReadWriteTransaction *)transaction | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     OWSAssert(thread); | 
		
	
		
			
				|  |  |  |  |     OWSAssert(fakeAssetLoader); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     TSAttachment *_Nullable attachment = nil; | 
		
	
		
			
				|  |  |  |  |     if (fakeAssetLoader) { | 
		
	
	
		
			
				
					|  |  |  | @ -3454,6 +3630,7 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  |                              readTimestamp:[NSDate ows_millisecondTimeStamp] | 
		
	
		
			
				|  |  |  |  |                                transaction:transaction]; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return message; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | + (TSIncomingMessage *)createFakeIncomingMessage:(TSThread *)thread | 
		
	
	
		
			
				
					|  |  |  | @ -3464,7 +3641,6 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  |                                      transaction:(YapDatabaseReadWriteTransaction *)transaction | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     OWSAssert(thread); | 
		
	
		
			
				|  |  |  |  |     OWSAssert(fakeAssetLoader); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     TSAttachment *_Nullable attachment = nil; | 
		
	
		
			
				|  |  |  |  |     if (fakeAssetLoader) { | 
		
	
	
		
			
				
					|  |  |  | @ -3521,6 +3697,7 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  |                 isAttachmentDownloaded:(BOOL)isAttachmentDownloaded | 
		
	
		
			
				|  |  |  |  |                            transaction:(YapDatabaseReadWriteTransaction *)transaction | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     OWSAssert(fakeAssetLoader); | 
		
	
		
			
				|  |  |  |  |     OWSAssert(fakeAssetLoader.filePath); | 
		
	
		
			
				|  |  |  |  |     OWSAssert(transaction); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | 
 |