pull/183/head
nielsandriesse 5 years ago
parent f834850317
commit 31bfa0888b

@ -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

@ -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<ConversationViewItem> item in self.viewItems) {
[item clearCachedLayoutState];
}
[self updateInputToolbar];
[self resetContentAndLayout];
}

@ -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]

@ -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

@ -768,6 +768,11 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
}
}
- (BOOL)isContactFriend
{
return [LKFriendRequestProtocol getFriendRequestUIStatusForThread:self] == LKFriendRequestUIStatusFriends;
}
@end
NS_ASSUME_NONNULL_END

@ -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
}

@ -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

Loading…
Cancel
Save