Reduce code duplication & fix cell sizing bug

This commit is contained in:
Niels Andriesse 2019-05-16 12:20:56 +10:00
parent 3161680432
commit 3728638832
9 changed files with 35 additions and 19 deletions

View File

@ -130,7 +130,7 @@
let totalHeight: CGFloat = {
switch kind {
case .incoming:
let buttonHeight = dummyFriendRequestView.buttonHeight
let buttonHeight = dummyFriendRequestView.buttonStackView.isHidden ? 0 : dummyFriendRequestView.buttonHeight
return topSpacing + messageHeight + buttonHeight
case .outgoing:
return topSpacing + messageHeight

View File

@ -207,8 +207,6 @@ NS_ASSUME_NONNULL_BEGIN
}
if (self.message.isFriendRequest) {
// At this point, self.message.thread.friendRequestStatus should be either TSThreadFriendRequestStatusRequestReceived,
// TSThreadFriendRequestStatusPendingSend or TSThreadFriendRequestStatusRequestSent
NSString *rawKind = self.message.interactionType == OWSInteractionType_IncomingMessage ? @"incoming" : @"outgoing";
self.friendRequestView = [[FriendRequestView alloc] initWithRawKind:rawKind];
self.friendRequestView.message = self.message;

View File

@ -4303,8 +4303,7 @@ typedef enum : NSUInteger {
- (void)declineFriendRequest:(TSIncomingMessage *)friendRequest
{
// Reset friend request status
self.thread.friendRequestStatus = TSThreadFriendRequestStatusNone;
[self.thread save];
[self.thread setFriendRequestStatus:TSThreadFriendRequestStatusNone withTransaction:nil];
// Delete prekeys
NSString *contactID = self.thread.recipientIdentifiers.firstObject;
OWSPrimaryStorage *primaryStorage = SSKEnvironment.shared.primaryStorage;

View File

@ -189,6 +189,8 @@ typedef NS_ENUM(NSInteger, TSThreadFriendRequestStatus) {
#pragma mark - Loki Friend Request Handling
- (void)setFriendRequestStatus:(TSThreadFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction;
/// Shorthand for checking that `friendRequestStatus` is `TSThreadFriendRequestStatusPendingSend`, `TSThreadFriendRequestStatusRequestSent` or `TSThreadFriendRequestStatusRequestReceived`.
- (BOOL)hasPendingFriendRequest;

View File

@ -698,6 +698,16 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
#pragma mark - Loki Friend Request Handling
- (void)setFriendRequestStatus:(TSThreadFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction
{
self.friendRequestStatus = friendRequestStatus;
if (transaction == nil) {
[self save];
} else {
[self saveWithTransaction:transaction];
}
}
- (BOOL)hasPendingFriendRequest
{
return self.friendRequestStatus == TSThreadFriendRequestStatusPendingSend || self.friendRequestStatus == TSThreadFriendRequestStatusRequestSent

View File

@ -69,6 +69,10 @@ NS_ASSUME_NONNULL_BEGIN
- (void)updateWithLinkPreview:(OWSLinkPreview *)linkPreview transaction:(YapDatabaseReadWriteTransaction *)transaction;
#pragma mark - Loki Friend Request Handling
- (void)setIsFriendRequest:(BOOL)isFriendRequest withTransaction:(YapDatabaseReadWriteTransaction *)transaction;
@end
NS_ASSUME_NONNULL_END

View File

@ -440,6 +440,16 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
#pragma mark - Loki Friend Request Handling
- (void)setIsFriendRequest:(BOOL)isFriendRequest withTransaction:(YapDatabaseReadWriteTransaction *)transaction
{
self.isFriendRequest = isFriendRequest;
if (transaction == nil) {
[self save];
} else {
[self saveWithTransaction:transaction];
}
}
@end
NS_ASSUME_NONNULL_END

View File

@ -1443,12 +1443,10 @@ NS_ASSUME_NONNULL_BEGIN
}
if (envelope.type == SSKProtoEnvelopeTypeFriendRequest) {
thread.friendRequestStatus = TSThreadFriendRequestStatusRequestReceived;
[thread saveWithTransaction:transaction];
[thread setFriendRequestStatus:TSThreadFriendRequestStatusRequestReceived withTransaction:transaction];
incomingMessage.isFriendRequest = YES;
} else if (incomingMessage.body == @"") { // Assumed to be an accept friend request message
thread.friendRequestStatus = TSThreadFriendRequestStatusFriends;
[thread saveWithTransaction:transaction];
[thread setFriendRequestStatus:TSThreadFriendRequestStatusFriends withTransaction:transaction];
}
[incomingMessage saveWithTransaction:transaction];

View File

@ -1111,21 +1111,17 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
// Update the thread's friend request status if needed
NSInteger *messageType = ((NSNumber *)signalMessage[@"type"]).integerValue;
if (messageType == TSFriendRequestMessageType) {
message.thread.friendRequestStatus = TSThreadFriendRequestStatusPendingSend;
[message.thread save];
message.isFriendRequest = YES;
[message save];
[message.thread setFriendRequestStatus:TSThreadFriendRequestStatusPendingSend withTransaction:nil];
[message setIsFriendRequest:YES withTransaction:nil];
}
BOOL isPoWRequired = YES; // TODO: Base on message type
[[LokiAPI objc_sendSignalMessage:signalMessage to:recipient.recipientId timestamp:message.timestamp requiringPoW:isPoWRequired]
.thenOn(OWSDispatch.sendingQueue, ^(id result) {
// Update the thread's friend request status if needed
if (messageType == TSFriendRequestMessageType) {
message.thread.friendRequestStatus = TSThreadFriendRequestStatusRequestSent;
[message.thread save];
[message.thread setFriendRequestStatus:TSThreadFriendRequestStatusRequestSent withTransaction:nil];
} else if (message.body == @"") { // Assumed to be an accept friend request message
message.thread.friendRequestStatus = TSThreadFriendRequestStatusFriends;
[message.thread save];
[message.thread setFriendRequestStatus:TSThreadFriendRequestStatusFriends withTransaction:nil];
}
// Invoke the completion handler
[self messageSendDidSucceed:messageSend
@ -1136,8 +1132,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
.catchOn(OWSDispatch.sendingQueue, ^(NSError *error) {
// Update the thread's friend request status if needed
if (messageType == TSFriendRequestMessageType) {
message.thread.friendRequestStatus = TSThreadFriendRequestStatusNone;
[message.thread save];
[message.thread setFriendRequestStatus:TSThreadFriendRequestStatusNone withTransaction:nil];
}
// Handle the error
NSUInteger statusCode = 0;