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

@ -109,37 +109,35 @@ final class FriendRequestView : UIView {
private func updateUI() { private func updateUI() {
let thread = message.thread let thread = message.thread
let friendRequestStatus = FriendRequestProtocol.getFriendRequestUIStatus(for: 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 displayName = UserDisplayNameUtilities.getPrivateChatDisplayName(for: contactID) ?? contactID
let format: String?
switch kind { switch kind {
case .incoming: case .incoming:
buttonStackView.isHidden = friendRequestStatus != .received buttonStackView.isHidden = friendRequestStatus != .received
spacer2.isHidden = buttonStackView.isHidden spacer2.isHidden = buttonStackView.isHidden
let format: String
switch friendRequestStatus { switch friendRequestStatus {
case .none: format = NSLocalizedString("You've declined %@'s session request", comment: "") 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 .received: format = NSLocalizedString("%@ sent you a session request", comment: "")
case .sent: return // Should never occur case .sent: return // Should never occur
case .expired: format = NSLocalizedString("%@'s session request has expired", comment: "") case .expired: format = NSLocalizedString("%@'s session request has expired", comment: "")
} }
label.text = String(format: format, displayName)
case .outgoing: case .outgoing:
let format: String?
switch friendRequestStatus { switch friendRequestStatus {
case .none: format = nil // The message failed to send case .none: format = nil // The message failed to send
case .friends: format = NSLocalizedString("%@ accepted your session request", comment: "") case .friends: format = nil
case .received: return // Should never occur case .received: return
case .sent: format = NSLocalizedString("You've sent %@ a session request", comment: "") case .sent: format = NSLocalizedString("You've sent %@ a session request", comment: "")
case .expired: format = NSLocalizedString("Your session request to %@ has expired", comment: "") case .expired: format = NSLocalizedString("Your session request to %@ has expired", comment: "")
} }
}
if let format = format { if let format = format {
label.text = String(format: format, displayName) label.text = String(format: format, displayName)
} }
label.isHidden = (format == nil) label.isHidden = (format == nil)
spacer1.isHidden = label.isHidden spacer1.isHidden = label.isHidden
} }
}
// MARK: Interaction // MARK: Interaction
@objc private func accept() { @objc private func accept() {

@ -544,7 +544,9 @@ typedef enum : NSUInteger {
// Ensure the thread instance is up to date // Ensure the thread instance is up to date
[self.thread reload]; [self.thread reload];
// Update the UI // Update the UI
[self.viewItems.lastObject clearCachedLayoutState]; for (id<ConversationViewItem> item in self.viewItems) {
[item clearCachedLayoutState];
}
[self updateInputToolbar]; [self updateInputToolbar];
[self resetContentAndLayout]; [self resetContentAndLayout];
} }

@ -185,6 +185,17 @@ typedef void (^BuildOutgoingMessageCompletionBlock)(TSOutgoingMessage *savedMess
NSString *messageClassAsString = (thread.isContactFriend || thread.isGroupThread || thread.isNoteToSelf) ? @"TSOutgoingMessage" : @"LKFriendRequestMessage"; NSString *messageClassAsString = (thread.isContactFriend || thread.isGroupThread || thread.isNoteToSelf) ? @"TSOutgoingMessage" : @"LKFriendRequestMessage";
Class messageClass = NSClassFromString(messageClassAsString); 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 = TSOutgoingMessage *message =
[[messageClass alloc] initOutgoingMessageWithTimestamp:[NSDate ows_millisecondTimeStamp] [[messageClass alloc] initOutgoingMessageWithTimestamp:[NSDate ows_millisecondTimeStamp]
inThread:thread inThread:thread

@ -41,13 +41,7 @@ extern ConversationColorName const kConversationColorName_Default;
// Loki friend request handling // Loki friend request handling
// ======== // ========
@property (nonatomic) NSInteger friendRequestStatus __deprecated_msg("use OWSPrimaryStorage.getFriendRequestStatusForContact:transaction: instead"); @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 isContactFriend;
@property (nonatomic, readonly) BOOL hasCurrentUserSentFriendRequest;
@property (nonatomic, readonly) BOOL hasCurrentUserReceivedFriendRequest;
// ======== // ========
@property (nonatomic) BOOL isForceHidden; // FIXME: Having both this and shouldThreadBeVisible is confusing @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 @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

@ -16,7 +16,8 @@ public final class FriendRequestProtocol : NSObject {
internal static var storage: OWSPrimaryStorage { OWSPrimaryStorage.shared() } internal static var storage: OWSPrimaryStorage { OWSPrimaryStorage.shared() }
// MARK: - Friend Request UI Status // MARK: - Friend Request UI Status
@objc public enum FriendRequestUIStatus : Int { @objc(LKFriendRequestUIStatus)
public enum FriendRequestUIStatus : Int {
case friends, received, sent, none, expired case friends, received, sent, none, expired
} }

@ -475,26 +475,13 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
- (BOOL)isFriendRequest - (BOOL)isFriendRequest
{ {
NSString *contactID = self.thread.contactIdentifier; return [LKFriendRequestProtocol getFriendRequestUIStatusForThread:self.thread] != LKFriendRequestUIStatusFriends;
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;
} }
- (BOOL)hasFriendRequestStatusMessage - (BOOL)hasFriendRequestStatusMessage
{ {
NSString *contactID = self.thread.contactIdentifier; LKFriendRequestUIStatus friendRequestStatus = [LKFriendRequestProtocol getFriendRequestUIStatusForThread:self.thread];
if (contactID == nil) { return NO; } return friendRequestStatus != LKFriendRequestUIStatusNone && friendRequestStatus != LKFriendRequestUIStatusFriends;
OWSPrimaryStorage *storage = OWSPrimaryStorage.sharedManager;
__block LKFriendRequestStatus friendRequestStatus;
[storage.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
friendRequestStatus = [storage getFriendRequestStatusForContact:contactID transaction:transaction];
}];
return self.isFriendRequest && friendRequestStatus != LKFriendRequestStatusNone;
} }
#pragma mark - Open Groups #pragma mark - Open Groups

Loading…
Cancel
Save