From 76995e4594d6c778e3d8782938e707135203d1e5 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Mon, 9 Apr 2018 15:28:51 -0400 Subject: [PATCH] Enforce quoted reply edge cases. --- .../ConversationView/ConversationViewItem.m | 19 + .../ViewControllers/DebugUI/DebugUIMessages.m | 902 +++++++++--------- SignalMessaging/Models/OWSQuotedReplyModel.m | 3 +- .../Messages/Attachments/TSAttachmentStream.m | 2 +- 4 files changed, 448 insertions(+), 478 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m index c688dff4c..6c47fceb6 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m @@ -647,6 +647,25 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) } else if (action == self.metadataActionSelector) { return YES; } else if (action == self.replyActionSelector) { + if ([self.interaction isKindOfClass:[TSOutgoingMessage class]]) { + TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)self.interaction; + if (outgoingMessage.messageState == TSOutgoingMessageStateUnsent + || outgoingMessage.messageState == TSOutgoingMessageStateAttemptingOut) { + // Don't let users reply to messages which aren't yet delivered to the service. + return NO; + } + } else if ([self.interaction isKindOfClass:[TSIncomingMessage class]]) { + TSIncomingMessage *incomingMessage = (TSIncomingMessage *)self.interaction; + if (incomingMessage.hasAttachments) { + NSString *attachmentId = incomingMessage.attachmentIds.firstObject; + TSAttachment *_Nullable attachment = [TSAttachment fetchObjectWithUniqueID:attachmentId]; + if (![attachment isKindOfClass:[TSAttachmentStream class]]) { + // Don't let users reply to attachments which aren't yet downloaded + // (or otherwise missing on disk). + return NO; + } + } + } return YES; } else { return NO; diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m index f0068d350..4ad1d0537 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m +++ b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m @@ -1888,8 +1888,6 @@ NS_ASSUME_NONNULL_BEGIN quotedMessageBody:(nullable NSString *)quotedMessageBody // Optional. At least one of quotedMessageBody and quotedMessageAssetLoader should be non-nil. quotedMessageAssetLoader:(nullable DebugUIMessagesAssetLoader *)quotedMessageAssetLoader -// Only applies if quotedMessageAssetLoader is non-nil. -isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded replyLabel:(NSString *)replyLabel isReplyIncoming:(BOOL)isReplyIncoming replyMessageBody:(nullable NSString *)replyMessageBody @@ -1935,9 +1933,6 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded [label appendFormat:@" %@", quotedMessageAssetLoader.labelEmoji]; } if (isQuotedMessageIncoming) { - if (quotedMessageAssetLoader && !isQuotedMessageAttachmentDownloaded) { - [label appendString:@" !Downloaded"]; - } } else { [label appendString:[self actionLabelForHasCaption:quotedMessageBody.length > 0 outgoingMessageState:quotedMessageMessageState @@ -1965,10 +1960,12 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded messageToQuote = [self createFakeIncomingMessage:thread messageBody:quotedMessageBodyWIndex fakeAssetLoader:quotedMessageAssetLoader - isAttachmentDownloaded:isQuotedMessageAttachmentDownloaded + isAttachmentDownloaded:YES quotedMessage:nil transaction:transaction]; OWSAssert(messageToQuote); + DDLogVerbose(@"%@ %@", self.logTag, label); + [DDLog flushLog]; quotedMessage = [[OWSQuotedReplyModel quotedReplyForMessage:messageToQuote transaction:transaction] buildQuotedMessage]; } else { @@ -2053,64 +2050,59 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded } [actions addObjectsFromArray:@[ [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Medium Text" - isReplyIncoming:NO - replyMessageBody:mediumText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Medium Text" + isReplyIncoming:NO + replyMessageBody:mediumText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Medium Text" - isQuotedMessageIncoming:NO - quotedMessageBody:mediumText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Medium Text" + isQuotedMessageIncoming:NO + quotedMessageBody:mediumText + quotedMessageAssetLoader:nil + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Medium Text" - isQuotedMessageIncoming:NO - quotedMessageBody:mediumText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Medium Text" - isReplyIncoming:NO - replyMessageBody:mediumText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Medium Text" + isQuotedMessageIncoming:NO + quotedMessageBody:mediumText + quotedMessageAssetLoader:nil + replyLabel:@"Medium Text" + isReplyIncoming:NO + replyMessageBody:mediumText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Long Text" - isQuotedMessageIncoming:NO - quotedMessageBody:longText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Long Text" - isReplyIncoming:NO - replyMessageBody:longText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Long Text" + isQuotedMessageIncoming:NO + quotedMessageBody:longText + quotedMessageAssetLoader:nil + replyLabel:@"Long Text" + isReplyIncoming:NO + replyMessageBody:longText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], ]]; if (includeLabels) { @@ -2119,148 +2111,136 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded } [actions addObjectsFromArray:@[ [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Jpg" - isQuotedMessageIncoming:NO - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader jpegInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Jpg" + isQuotedMessageIncoming:NO + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader jpegInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Jpg" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader jpegInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Jpg" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader jpegInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Mp3" - isQuotedMessageIncoming:NO - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader mp3Instance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Mp3" + isQuotedMessageIncoming:NO + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader mp3Instance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Mp3" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader mp3Instance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Mp3" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader mp3Instance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Mp4" - isQuotedMessageIncoming:NO - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader mp4Instance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Mp4" + isQuotedMessageIncoming:NO + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader mp4Instance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Mp4" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader mp4Instance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Mp4" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader mp4Instance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Gif" - isQuotedMessageIncoming:NO - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader gifInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Gif" + isQuotedMessageIncoming:NO + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader gifInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Gif" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader gifInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Gif" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader gifInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Pdf" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tinyPdfInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Pdf" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tinyPdfInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Missing Pdf" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader missingPdfInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Missing Pdf" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader missingPdfInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Tiny Png" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tinyPngInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Tiny Png" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tinyPngInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Missing Png" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader missingPngInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Missing Png" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader missingPngInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], ]]; if (includeLabels) { @@ -2269,115 +2249,106 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded } [actions addObjectsFromArray:@[ [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Tall Portrait Png" - isQuotedMessageIncoming:NO - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Tall Portrait Png" + isQuotedMessageIncoming:NO + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Tall Portrait Png" - isQuotedMessageIncoming:NO - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Medium Text" - isReplyIncoming:NO - replyMessageBody:mediumText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Tall Portrait Png" + isQuotedMessageIncoming:NO + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] + replyLabel:@"Medium Text" + isReplyIncoming:NO + replyMessageBody:mediumText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Tall Portrait Png" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Tall Portrait Png" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Wide Landscape Png" - isQuotedMessageIncoming:NO - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Wide Landscape Png" + isQuotedMessageIncoming:NO + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Wide Landscape Png" - isQuotedMessageIncoming:NO - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Medium Text" - isReplyIncoming:NO - replyMessageBody:mediumText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Wide Landscape Png" + isQuotedMessageIncoming:NO + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] + replyLabel:@"Medium Text" + isReplyIncoming:NO + replyMessageBody:mediumText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Wide Landscape Png" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Medium Text" - isReplyIncoming:NO - replyMessageBody:mediumText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Wide Landscape Png" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] + replyLabel:@"Medium Text" + isReplyIncoming:NO + replyMessageBody:mediumText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Tiny Png" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tinyPngInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Tiny Png" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tinyPngInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Tiny Png" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tinyPngInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Medium Text" - isReplyIncoming:NO - replyMessageBody:mediumText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Tiny Png" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tinyPngInstance] + replyLabel:@"Medium Text" + isReplyIncoming:NO + replyMessageBody:mediumText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], ]]; void (^directionActions)(BOOL, BOOL) = ^(BOOL isQuotedMessageIncoming, BOOL isReplyIncoming) { [actions addObjectsFromArray:@[ [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:isQuotedMessageIncoming - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:isReplyIncoming - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:isQuotedMessageIncoming + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Short Text" + isReplyIncoming:isReplyIncoming + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], ]]; }; @@ -2396,136 +2367,125 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded } [actions addObjectsFromArray:@[ [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Jpg" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader jpegInstance] - isQuotedMessageAttachmentDownloaded:NO - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Jpg" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader jpegInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Mp3" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader mp3Instance] - isQuotedMessageAttachmentDownloaded:NO - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Mp3" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader mp3Instance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Mp4" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader mp4Instance] - isQuotedMessageAttachmentDownloaded:NO - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Mp4" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader mp4Instance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Gif" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader gifInstance] - isQuotedMessageAttachmentDownloaded:NO - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Gif" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader gifInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Pdf" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tinyPdfInstance] - isQuotedMessageAttachmentDownloaded:NO - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Pdf" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tinyPdfInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Missing Pdf" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader missingPdfInstance] - isQuotedMessageAttachmentDownloaded:NO - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Missing Pdf" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader missingPdfInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Tiny Png" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tinyPngInstance] - isQuotedMessageAttachmentDownloaded:NO - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Tiny Png" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tinyPngInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Missing Png" - isQuotedMessageIncoming:YES - quotedMessageBody:nil - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader missingPngInstance] - isQuotedMessageAttachmentDownloaded:NO - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Missing Png" + isQuotedMessageIncoming:YES + quotedMessageBody:nil + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader missingPngInstance] + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateAttemptingOut], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateAttemptingOut], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateUnsent], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateUnsent], ]]; @@ -2536,134 +2496,124 @@ isQuotedMessageAttachmentDownloaded:(BOOL)isQuotedMessageAttachmentDownloaded [actions addObjectsFromArray:@[ // Png + Text -> Png + Text [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Tall Portrait Png" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Tall Portrait Png" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Tall Portrait Png" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] + replyLabel:@"Tall Portrait Png" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] + replyMessageState:TSOutgoingMessageStateSentToService], // Text -> Png + Text [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Tall Portrait Png" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:nil - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Tall Portrait Png" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:nil + replyMessageState:TSOutgoingMessageStateSentToService], // Text -> Png [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Tall Portrait Png" - isReplyIncoming:NO - replyMessageBody:nil - replyAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Tall Portrait Png" + isReplyIncoming:NO + replyMessageBody:nil + replyAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] + replyMessageState:TSOutgoingMessageStateSentToService], // Png -> Png + Text [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Tall Portrait Png" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Tall Portrait Png" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] + replyMessageState:TSOutgoingMessageStateSentToService], // Png -> Portrait Png + Text [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Tall Portrait Png" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Tall Portrait Png" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:[DebugUIMessagesAssetLoader tallPortraitPngInstance] + replyMessageState:TSOutgoingMessageStateSentToService], // Png -> Landscape Png + Text [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Wide Landscape Png" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Wide Landscape Png" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] + replyMessageState:TSOutgoingMessageStateSentToService], // Png -> Landscape Png + Text [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Wide Landscape Png + Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Wide Landscape Png + Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] + replyMessageState:TSOutgoingMessageStateSentToService], // Png -> Landscape Png + Text [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Wide Landscape Png + Short Text" - isReplyIncoming:NO - replyMessageBody:shortText - replyAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Wide Landscape Png + Short Text" + isReplyIncoming:NO + replyMessageBody:shortText + replyAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] + replyMessageState:TSOutgoingMessageStateSentToService], // Png -> Landscape Png + Text [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Wide Landscape Png + Medium Text" - isReplyIncoming:NO - replyMessageBody:mediumText - replyAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Wide Landscape Png + Medium Text" + isReplyIncoming:NO + replyMessageBody:mediumText + replyAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] + replyMessageState:TSOutgoingMessageStateSentToService], // Png -> Landscape Png + Text [self fakeQuotedReplyAction:thread - quotedMessageLabel:@"Short Text" - isQuotedMessageIncoming:NO - quotedMessageBody:shortText - quotedMessageAssetLoader:nil - isQuotedMessageAttachmentDownloaded:YES - replyLabel:@"Wide Landscape Png + Medium Text" - isReplyIncoming:NO - replyMessageBody:mediumText - replyAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] - replyMessageState:TSOutgoingMessageStateSentToService], + quotedMessageLabel:@"Short Text" + isQuotedMessageIncoming:NO + quotedMessageBody:shortText + quotedMessageAssetLoader:nil + replyLabel:@"Wide Landscape Png + Medium Text" + isReplyIncoming:NO + replyMessageBody:mediumText + replyAssetLoader:[DebugUIMessagesAssetLoader wideLandscapePngInstance] + replyMessageState:TSOutgoingMessageStateSentToService], ]]; return actions; diff --git a/SignalMessaging/Models/OWSQuotedReplyModel.m b/SignalMessaging/Models/OWSQuotedReplyModel.m index c6b34dc66..06e2ad124 100644 --- a/SignalMessaging/Models/OWSQuotedReplyModel.m +++ b/SignalMessaging/Models/OWSQuotedReplyModel.m @@ -170,7 +170,8 @@ if (!hasText && !hasAttachment) { OWSFail(@"%@ quoted message has neither text nor attachment", self.logTag); - return nil; + quotedText = @""; + hasText = YES; } return [[OWSQuotedReplyModel alloc] initWithTimestamp:timestamp diff --git a/SignalServiceKit/src/Messages/Attachments/TSAttachmentStream.m b/SignalServiceKit/src/Messages/Attachments/TSAttachmentStream.m index 4c98afe62..773e16f64 100644 --- a/SignalServiceKit/src/Messages/Attachments/TSAttachmentStream.m +++ b/SignalServiceKit/src/Messages/Attachments/TSAttachmentStream.m @@ -347,7 +347,7 @@ NS_ASSUME_NONNULL_BEGIN } if (![[NSFileManager defaultManager] fileExistsAtPath:thumbnailPath]) { - OWSFail(@"%@ missing thumbnail for attachmentId: %@", self.logTag, self.uniqueId); + DDLogError(@"%@ missing thumbnail for attachmentId: %@", self.logTag, self.uniqueId); return nil; }