Fix crash & clean

This commit is contained in:
Niels Andriesse 2019-05-21 09:09:48 +10:00
parent 740291cceb
commit 5622c08124
5 changed files with 25 additions and 13 deletions

View File

@ -66,10 +66,21 @@
}
addSubview(mainStackView)
mainStackView.autoPin(toEdgesOf: self)
NotificationCenter.default.addObserver(self, selector: #selector(handleFriendRequestStatusChangedNotification), name: .messageFriendRequestStatusChanged, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
// MARK: Updating
@objc func handleMessageChanged() {
@objc private func handleFriendRequestStatusChangedNotification(_ notification: Notification) {
guard let messageID = notification.object as? String, messageID == message?.uniqueId else { return }
message.reload()
handleMessageChanged()
}
@objc private func handleMessageChanged() {
precondition(message != nil)
switch kind {
case .incoming:
@ -108,7 +119,6 @@
guard let message = message as? TSIncomingMessage else { preconditionFailure() }
message.saveFriendRequestStatus(.declined, with: nil)
delegate?.declineFriendRequest(message)
handleMessageChanged() // Update UI
}
// MARK: Measuring

View File

@ -480,16 +480,9 @@ typedef enum : NSUInteger {
// Ensure thread instance is up to date
[self.thread reload];
// Update UI
id<ConversationViewItem> lastItem = self.viewItems.lastObject;
[lastItem clearCachedLayoutState];
UICollectionViewCell *cell = self.collectionView.visibleCells.lastObject;
OWSMessageCell *messageCell = (OWSMessageCell *)[cell as:OWSMessageCell.class];
if (messageCell != nil) {
[messageCell.friendRequestView.message reload];
[messageCell.friendRequestView handleMessageChanged];
}
[self resetContentAndLayout];
[self.viewItems.lastObject clearCachedLayoutState];
[self updateInputToolbar];
[self resetContentAndLayout];
}
- (void)peekSetup

View File

@ -1,8 +1,12 @@
public extension Notification.Name {
public static let threadFriendRequestStatusChanged = Notification.Name("threadFriendRequestStatusChanged")
public static let messageFriendRequestStatusChanged = Notification.Name("messageFriendRequestStatusChanged")
}
// MARK: - Obj-C
@objc public extension NSNotification {
@objc public static let threadFriendRequestStatusChanged = Notification.Name.threadFriendRequestStatusChanged.rawValue as NSString // Obj-C
@objc public static let threadFriendRequestStatusChanged = Notification.Name.threadFriendRequestStatusChanged.rawValue as NSString
@objc public static let messageFriendRequestStatusChanged = Notification.Name.messageFriendRequestStatusChanged.rawValue as NSString
}

View File

@ -444,10 +444,15 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
- (void)saveFriendRequestStatus:(TSMessageFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction
{
self.friendRequestStatus = friendRequestStatus;
void (^postNotification)() = ^() {
[NSNotificationCenter.defaultCenter postNotificationName:NSNotification.messageFriendRequestStatusChanged object:self.uniqueId];
};
if (transaction == nil) {
[self save];
[self.dbReadWriteConnection flushTransactionsWithCompletionQueue:dispatch_get_main_queue() completionBlock:^{ postNotification(); }];
} else {
[self saveWithTransaction:transaction];
[transaction.connection flushTransactionsWithCompletionQueue:dispatch_get_main_queue() completionBlock:^{ postNotification(); }];
}
}

View File

@ -1122,7 +1122,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[message.thread saveFriendRequestStatus:TSThreadFriendRequestStatusRequestSent withTransaction:transaction];
[message.thread removeOutgoingFriendRequestMessagesWithTransaction:transaction];
[message saveFriendRequestStatus:TSMessageFriendRequestStatusPending withTransaction:nil];
[message saveFriendRequestStatus:TSMessageFriendRequestStatusPending withTransaction:transaction];
// Set the expiration date
NSTimeInterval expirationInterval = 72 * kHourInterval;
NSDate *expireDate = [[NSDate new] dateByAddingTimeInterval:expirationInterval];