From 31bfa0888b5b3139ad43ac09c12e6ad8e4b7f4cc Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Mon, 4 May 2020 13:25:38 +1000 Subject: [PATCH] Debug --- .../Loki/Components/FriendRequestView.swift | 22 +++++++++---------- .../ConversationViewController.m | 4 +++- SignalMessaging/utils/ThreadUtil.m | 11 ++++++++++ SignalServiceKit/src/Contacts/TSThread.h | 6 ----- SignalServiceKit/src/Contacts/TSThread.m | 5 +++++ .../FriendRequestProtocol.swift | 3 ++- .../src/Messages/Interactions/TSMessage.m | 19 +++------------- 7 files changed, 34 insertions(+), 36 deletions(-) diff --git a/Signal/src/Loki/Components/FriendRequestView.swift b/Signal/src/Loki/Components/FriendRequestView.swift index 748d3006b..f662b1ed4 100644 --- a/Signal/src/Loki/Components/FriendRequestView.swift +++ b/Signal/src/Loki/Components/FriendRequestView.swift @@ -109,36 +109,34 @@ final class FriendRequestView : UIView { private func updateUI() { let thread = message.thread let friendRequestStatus = FriendRequestProtocol.getFriendRequestUIStatus(for: thread) - guard friendRequestStatus != .none, let contactID = thread.contactIdentifier() else { return } + guard let contactID = thread.contactIdentifier() else { return } let displayName = UserDisplayNameUtilities.getPrivateChatDisplayName(for: contactID) ?? contactID + let format: String? switch kind { case .incoming: buttonStackView.isHidden = friendRequestStatus != .received spacer2.isHidden = buttonStackView.isHidden - let format: String switch friendRequestStatus { case .none: format = NSLocalizedString("You've declined %@'s session request", comment: "") - case .friends: format = NSLocalizedString("You've accepted %@'s session request", comment: "") + case .friends: format = nil case .received: format = NSLocalizedString("%@ sent you a session request", comment: "") case .sent: return // Should never occur case .expired: format = NSLocalizedString("%@'s session request has expired", comment: "") } - label.text = String(format: format, displayName) case .outgoing: - let format: String? switch friendRequestStatus { case .none: format = nil // The message failed to send - case .friends: format = NSLocalizedString("%@ accepted your session request", comment: "") - case .received: return // Should never occur + case .friends: format = nil + case .received: return case .sent: format = NSLocalizedString("You've sent %@ a session request", comment: "") case .expired: format = NSLocalizedString("Your session request to %@ has expired", comment: "") } - if let format = format { - label.text = String(format: format, displayName) - } - label.isHidden = (format == nil) - spacer1.isHidden = label.isHidden } + if let format = format { + label.text = String(format: format, displayName) + } + label.isHidden = (format == nil) + spacer1.isHidden = label.isHidden } // MARK: Interaction diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 69d193b74..9a83e0c9e 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -544,7 +544,9 @@ typedef enum : NSUInteger { // Ensure the thread instance is up to date [self.thread reload]; // Update the UI - [self.viewItems.lastObject clearCachedLayoutState]; + for (id item in self.viewItems) { + [item clearCachedLayoutState]; + } [self updateInputToolbar]; [self resetContentAndLayout]; } diff --git a/SignalMessaging/utils/ThreadUtil.m b/SignalMessaging/utils/ThreadUtil.m index a1516c539..d9dd7e10d 100644 --- a/SignalMessaging/utils/ThreadUtil.m +++ b/SignalMessaging/utils/ThreadUtil.m @@ -184,6 +184,17 @@ typedef void (^BuildOutgoingMessageCompletionBlock)(TSOutgoingMessage *savedMess // If we're friends then the assumption is that we have the other user's pre key bundle. NSString *messageClassAsString = (thread.isContactFriend || thread.isGroupThread || thread.isNoteToSelf) ? @"TSOutgoingMessage" : @"LKFriendRequestMessage"; Class messageClass = NSClassFromString(messageClassAsString); + + if ([messageClassAsString isEqual:@"LKFriendRequestMessage"]) { + NSString *recipientID = thread.contactIdentifier; + if (recipientID != nil) { + dispatch_async(dispatch_get_main_queue(), ^{ + [OWSPrimaryStorage.sharedManager.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + [LKFriendRequestProtocol setFriendRequestStatusToSendingIfNeededForHexEncodedPublicKey:recipientID transaction:transaction]; + }]; + }); + } + } TSOutgoingMessage *message = [[messageClass alloc] initOutgoingMessageWithTimestamp:[NSDate ows_millisecondTimeStamp] diff --git a/SignalServiceKit/src/Contacts/TSThread.h b/SignalServiceKit/src/Contacts/TSThread.h index 0e4f1db7b..139f3a02d 100644 --- a/SignalServiceKit/src/Contacts/TSThread.h +++ b/SignalServiceKit/src/Contacts/TSThread.h @@ -41,13 +41,7 @@ extern ConversationColorName const kConversationColorName_Default; // Loki friend request handling // ======== @property (nonatomic) NSInteger friendRequestStatus __deprecated_msg("use OWSPrimaryStorage.getFriendRequestStatusForContact:transaction: instead"); -@property (nonatomic, readonly) NSString *friendRequestStatusDescription; -/// Shorthand for checking that `friendRequestStatus` is `LKThreadFriendRequestStatusRequestSending`, `LKThreadFriendRequestStatusRequestSent` -/// or `LKThreadFriendRequestStatusRequestReceived`. -@property (nonatomic, readonly) BOOL hasPendingFriendRequest; @property (nonatomic, readonly) BOOL isContactFriend; -@property (nonatomic, readonly) BOOL hasCurrentUserSentFriendRequest; -@property (nonatomic, readonly) BOOL hasCurrentUserReceivedFriendRequest; // ======== @property (nonatomic) BOOL isForceHidden; // FIXME: Having both this and shouldThreadBeVisible is confusing diff --git a/SignalServiceKit/src/Contacts/TSThread.m b/SignalServiceKit/src/Contacts/TSThread.m index 4fa35a53e..8a7c1f731 100644 --- a/SignalServiceKit/src/Contacts/TSThread.m +++ b/SignalServiceKit/src/Contacts/TSThread.m @@ -768,6 +768,11 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa } } +- (BOOL)isContactFriend +{ + return [LKFriendRequestProtocol getFriendRequestUIStatusForThread:self] == LKFriendRequestUIStatusFriends; +} + @end NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestProtocol.swift index c976e26f0..d9a56b5f3 100644 --- a/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestProtocol.swift @@ -16,7 +16,8 @@ public final class FriendRequestProtocol : NSObject { internal static var storage: OWSPrimaryStorage { OWSPrimaryStorage.shared() } // MARK: - Friend Request UI Status - @objc public enum FriendRequestUIStatus : Int { + @objc(LKFriendRequestUIStatus) + public enum FriendRequestUIStatus : Int { case friends, received, sent, none, expired } diff --git a/SignalServiceKit/src/Messages/Interactions/TSMessage.m b/SignalServiceKit/src/Messages/Interactions/TSMessage.m index c76b4d548..272a78847 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSMessage.m @@ -475,26 +475,13 @@ static const NSUInteger OWSMessageSchemaVersion = 4; - (BOOL)isFriendRequest { - NSString *contactID = self.thread.contactIdentifier; - if (contactID == nil) { return NO; } - OWSPrimaryStorage *storage = OWSPrimaryStorage.sharedManager; - __block LKFriendRequestStatus friendRequestStatus; - [storage.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { - friendRequestStatus = [storage getFriendRequestStatusForContact:contactID transaction:transaction]; - }]; - return friendRequestStatus != LKFriendRequestStatusFriends; + return [LKFriendRequestProtocol getFriendRequestUIStatusForThread:self.thread] != LKFriendRequestUIStatusFriends; } - (BOOL)hasFriendRequestStatusMessage { - NSString *contactID = self.thread.contactIdentifier; - if (contactID == nil) { return NO; } - OWSPrimaryStorage *storage = OWSPrimaryStorage.sharedManager; - __block LKFriendRequestStatus friendRequestStatus; - [storage.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { - friendRequestStatus = [storage getFriendRequestStatusForContact:contactID transaction:transaction]; - }]; - return self.isFriendRequest && friendRequestStatus != LKFriendRequestStatusNone; + LKFriendRequestUIStatus friendRequestStatus = [LKFriendRequestProtocol getFriendRequestUIStatusForThread:self.thread]; + return friendRequestStatus != LKFriendRequestUIStatusNone && friendRequestStatus != LKFriendRequestUIStatusFriends; } #pragma mark - Open Groups