quote reply to contact share (no avatar)

// FREEBIE
pull/1/head
Michael Kirk 7 years ago
parent 742492dd32
commit 2cc3eabdb8

@ -2341,15 +2341,9 @@ typedef enum : NSUInteger {
{ {
DDLogDebug(@"%@ user did tap reply", self.logTag); DDLogDebug(@"%@ user did tap reply", self.logTag);
TSMessage *message = (TSMessage *)conversationItem.interaction;
if (![message isKindOfClass:[TSMessage class]]) {
OWSFail(@"%@ unexpected reply message: %@", self.logTag, message);
return;
}
__block OWSQuotedReplyModel *quotedReply; __block OWSQuotedReplyModel *quotedReply;
[self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) { [self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) {
quotedReply = [OWSQuotedReplyModel quotedReplyForMessage:message transaction:transaction]; quotedReply = [OWSQuotedReplyModel quotedReplyForConversationViewItem:conversationItem transaction:transaction];
}]; }];
if (![quotedReply isKindOfClass:[OWSQuotedReplyModel class]]) { if (![quotedReply isKindOfClass:[OWSQuotedReplyModel class]]) {

@ -1980,8 +1980,8 @@ NS_ASSUME_NONNULL_BEGIN
OWSAssert(messageToQuote); OWSAssert(messageToQuote);
DDLogVerbose(@"%@ %@", self.logTag, label); DDLogVerbose(@"%@ %@", self.logTag, label);
[DDLog flushLog]; [DDLog flushLog];
quotedMessage = [[OWSQuotedReplyModel quotedReplyForMessage:messageToQuote transaction:transaction] ConversationViewItem *viewItem = [[ConversationViewItem alloc] initWithInteraction:messageToQuote isGroupThread:thread.isGroupThread transaction:transaction];
buildQuotedMessage]; quotedMessage = [[OWSQuotedReplyModel quotedReplyForConversationViewItem:viewItem transaction:transaction] buildQuotedMessage];
} else { } else {
TSOutgoingMessage *_Nullable messageToQuote = [self createFakeOutgoingMessage:thread TSOutgoingMessage *_Nullable messageToQuote = [self createFakeOutgoingMessage:thread
messageBody:quotedMessageBodyWIndex messageBody:quotedMessageBodyWIndex
@ -1993,8 +1993,9 @@ NS_ASSUME_NONNULL_BEGIN
contactShare:nil contactShare:nil
transaction:transaction]; transaction:transaction];
OWSAssert(messageToQuote); OWSAssert(messageToQuote);
quotedMessage = [[OWSQuotedReplyModel quotedReplyForMessage:messageToQuote transaction:transaction]
buildQuotedMessage]; ConversationViewItem *viewItem = [[ConversationViewItem alloc] initWithInteraction:messageToQuote isGroupThread:thread.isGroupThread transaction:transaction];
quotedMessage = [[OWSQuotedReplyModel quotedReplyForConversationViewItem:viewItem transaction:transaction] buildQuotedMessage];
} }
OWSAssert(quotedMessage); OWSAssert(quotedMessage);

@ -2,6 +2,7 @@
// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // Copyright (c) 2018 Open Whisper Systems. All rights reserved.
// //
@class ConversationViewItem;
@class TSAttachmentPointer; @class TSAttachmentPointer;
@class TSAttachmentStream; @class TSAttachmentStream;
@class TSMessage; @class TSMessage;
@ -32,19 +33,25 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, readonly, nullable) NSString *sourceFilename; @property (nonatomic, readonly, nullable) NSString *sourceFilename;
@property (nonatomic, readonly, nullable) UIImage *thumbnailImage; @property (nonatomic, readonly, nullable) UIImage *thumbnailImage;
// Used for building an outgoing quoted reply preview, before it's sent // Convenience initializer for building an outgoing quoted reply preview, before it's sent
- (instancetype)initWithTimestamp:(uint64_t)timestamp - (instancetype)initWithTimestamp:(uint64_t)timestamp
authorId:(NSString *)authorId authorId:(NSString *)authorId
body:(NSString *_Nullable)body body:(NSString *_Nullable)body
attachmentStream:(nullable TSAttachmentStream *)attachment; attachmentStream:(nullable TSAttachmentStream *)attachment; //TODO quotedAttachmentStream?
// Convenience initializer for building an outgoing quoted reply preview, before it's sent
- (instancetype)initWithTimestamp:(uint64_t)timestamp
authorId:(NSString *)authorId
body:(NSString *_Nullable)body
thumbnailImage:(nullable UIImage *)thumbnailImage;
// Used for persisted quoted replies, both incoming and outgoing. // Used for persisted quoted replies, both incoming and outgoing.
- (instancetype)initWithQuotedMessage:(TSQuotedMessage *)quotedMessage - (instancetype)initWithQuotedMessage:(TSQuotedMessage *)quotedMessage
transaction:(YapDatabaseReadTransaction *)transaction; transaction:(YapDatabaseReadTransaction *)transaction;
// Builds a not-yet-sent QuotedReplyModel // Builds a not-yet-sent QuotedReplyModel
+ (nullable instancetype)quotedReplyForMessage:(TSMessage *)message + (nullable instancetype)quotedReplyForConversationViewItem:(ConversationViewItem *)conversationItem
transaction:(YapDatabaseReadTransaction *)transaction; transaction:(YapDatabaseReadTransaction *)transaction;
- (TSQuotedMessage *)buildQuotedMessage; - (TSQuotedMessage *)buildQuotedMessage;

@ -3,6 +3,8 @@
// //
#import "OWSQuotedReplyModel.h" #import "OWSQuotedReplyModel.h"
#import "ConversationViewItem.h"
#import <SignalMessaging/SignalMessaging-Swift.h>
#import <SignalServiceKit/MIMETypeUtil.h> #import <SignalServiceKit/MIMETypeUtil.h>
#import <SignalServiceKit/OWSMessageSender.h> #import <SignalServiceKit/OWSMessageSender.h>
#import <SignalServiceKit/TSAccountManager.h> #import <SignalServiceKit/TSAccountManager.h>
@ -33,6 +35,22 @@
thumbnailDownloadFailed:NO]; thumbnailDownloadFailed:NO];
} }
- (instancetype)initWithTimestamp:(uint64_t)timestamp
authorId:(NSString *)authorId
body:(NSString *_Nullable)body
thumbnailImage:(nullable UIImage *)thumbnailImage;
{
return [self initWithTimestamp:timestamp
authorId:authorId
body:body
thumbnailImage:thumbnailImage
contentType:nil
sourceFilename:nil
attachmentStream:nil
thumbnailAttachmentPointer:nil
thumbnailDownloadFailed:NO];
}
- (instancetype)initWithQuotedMessage:(TSQuotedMessage *)quotedMessage - (instancetype)initWithQuotedMessage:(TSQuotedMessage *)quotedMessage
transaction:(YapDatabaseReadTransaction *)transaction transaction:(YapDatabaseReadTransaction *)transaction
{ {
@ -113,15 +131,23 @@
quotedAttachmentsForSending:attachments]; quotedAttachmentsForSending:attachments];
} }
+ (nullable OWSQuotedReplyModel *)quotedReplyForMessage:(TSMessage *)message + (nullable instancetype)quotedReplyForConversationViewItem:(ConversationViewItem *)conversationItem
transaction:(YapDatabaseReadTransaction *)transaction; transaction:(YapDatabaseReadTransaction *)transaction;
{ {
OWSAssert(message); OWSAssert(conversationItem);
OWSAssert(transaction); OWSAssert(transaction);
TSMessage *message = (TSMessage *)conversationItem.interaction;
if (![message isKindOfClass:[TSMessage class]]) {
OWSFail(@"%@ unexpected reply message: %@", self.logTag, message);
return nil;
}
TSThread *thread = [message threadWithTransaction:transaction]; TSThread *thread = [message threadWithTransaction:transaction];
OWSAssert(thread); OWSAssert(thread);
uint64_t timestamp = message.timestamp;
NSString *_Nullable authorId = ^{ NSString *_Nullable authorId = ^{
if ([message isKindOfClass:[TSOutgoingMessage class]]) { if ([message isKindOfClass:[TSOutgoingMessage class]]) {
return [TSAccountManager localNumber]; return [TSAccountManager localNumber];
@ -133,8 +159,21 @@
} }
}(); }();
OWSAssert(authorId.length > 0); OWSAssert(authorId.length > 0);
if (conversationItem.contactShare) {
ContactShareViewModel *contactShare = conversationItem.contactShare;
// TODO We deliberately always pass `nil` for `thumbnailImage`, even though we might have a contactShare.avatarImage
// because the QuotedReplyViewModel has some hardcoded assumptions that only quoted attachments have
// thumbnails. Until we address that we want to be consistent about neither showing nor sending the
// contactShare avatar in the quoted reply.
return [[OWSQuotedReplyModel alloc] initWithTimestamp:timestamp
authorId:authorId
body:[@"👤 " stringByAppendingString:contactShare.displayName]
thumbnailImage:nil];
}
uint64_t timestamp = message.timestamp;
NSString *_Nullable quotedText = message.body; NSString *_Nullable quotedText = message.body;
BOOL hasText = quotedText.length > 0; BOOL hasText = quotedText.length > 0;
BOOL hasAttachment = NO; BOOL hasAttachment = NO;

Loading…
Cancel
Save