Update FriendRequestView for friend request refactor

pull/175/head
nielsandriesse 5 years ago
parent 0d48031e9c
commit 9bcde73d14

@ -9,7 +9,7 @@ final class FriendRequestView : UIView {
return isIncoming ? .incoming : .outgoing return isIncoming ? .incoming : .outgoing
} }
// MARK: Types // MARK: Kind
enum Kind : String { case incoming, outgoing } enum Kind : String { case incoming, outgoing }
// MARK: Components // MARK: Components
@ -90,7 +90,7 @@ final class FriendRequestView : UIView {
mainStackView.pin(to: self) mainStackView.pin(to: self)
updateUI() updateUI()
// Observe friend request status changes // Observe friend request status changes
NotificationCenter.default.addObserver(self, selector: #selector(handleFriendRequestStatusChangedNotification), name: .messageFriendRequestStatusChanged, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(handleFriendRequestStatusChangedNotification), name: .userFriendRequestStatusChanged, object: nil)
} }
deinit { deinit {
@ -100,50 +100,39 @@ final class FriendRequestView : UIView {
// MARK: Updating // MARK: Updating
@objc private func handleFriendRequestStatusChangedNotification(_ notification: Notification) { @objc private func handleFriendRequestStatusChangedNotification(_ notification: Notification) {
let messageID = notification.object as! String let messageID = notification.object as! String
guard messageID == message.uniqueId && TSMessage.fetch(uniqueId: messageID) != nil else { return } // It's possible for the message to be deleted at this point // It's possible for the message to be deleted at this point
guard messageID == message.uniqueId && TSMessage.fetch(uniqueId: messageID) != nil else { return }
message.reload() message.reload()
updateUI() updateUI()
} }
private func updateUI() { private func updateUI() {
// TODO: Expiration
let thread = message.thread
let friendRequestStatus = FriendRequestProtocol.getFriendRequestUIStatus(for: thread)
guard friendRequestStatus != .none, let contactID = thread.contactIdentifier() else { return }
let displayName = UserDisplayNameUtilities.getPrivateChatDisplayName(for: contactID) ?? contactID
switch kind { switch kind {
case .incoming: case .incoming:
guard let message = message as? TSIncomingMessage else { preconditionFailure() } buttonStackView.isHidden = friendRequestStatus != .received
buttonStackView.isHidden = message.friendRequestStatus != .pending
spacer2.isHidden = buttonStackView.isHidden spacer2.isHidden = buttonStackView.isHidden
let format: String = { let format: String
switch (message.friendRequestStatus) { switch friendRequestStatus {
case .none, .sendingOrFailed: preconditionFailure() case .none: format = NSLocalizedString("You've declined %@'s session request", comment: "")
case .pending: return NSLocalizedString("%@ sent you a session request", comment: "") case .friends: format = NSLocalizedString("You've accepted %@'s session request", comment: "")
case .accepted: return NSLocalizedString("You've accepted %@'s session request", comment: "") case .received: format = NSLocalizedString("%@ sent you a session request", comment: "")
case .declined: return NSLocalizedString("You've declined %@'s session request", comment: "") case .sent: return // Should never occur
case .expired: return NSLocalizedString("%@'s session request has expired", comment: "") }
default: preconditionFailure()
}
}()
let contactID = message.authorId
let displayName = UserDisplayNameUtilities.getPrivateChatDisplayName(for: contactID) ?? contactID
label.text = String(format: format, displayName) label.text = String(format: format, displayName)
case .outgoing: case .outgoing:
guard let message = message as? TSOutgoingMessage else { preconditionFailure() } let format: String
let format: String? = { switch friendRequestStatus {
switch (message.friendRequestStatus) { case .none: return // Should never occur
case .none: preconditionFailure() case .friends: format = NSLocalizedString("%@ accepted your session request", comment: "")
case .sendingOrFailed: return nil case .received: return // Should never occur
case .pending: return NSLocalizedString("You've sent %@ a session request", comment: "") case .sent: format = NSLocalizedString("You've sent %@ a session request", comment: "")
case .accepted: return NSLocalizedString("%@ accepted your session request", comment: "")
case .declined: preconditionFailure()
case .expired: return NSLocalizedString("Your session request to %@ has expired", comment: "")
default: preconditionFailure()
}
}()
if let format = format {
let contactID = message.thread.contactIdentifier()!
let displayName = UserDisplayNameUtilities.getPrivateChatDisplayName(for: contactID) ?? contactID
label.text = String(format: format, displayName)
} }
label.isHidden = (format == nil) label.text = String(format: format, displayName)
spacer1.isHidden = (label.isHidden)
} }
} }

@ -82,6 +82,7 @@ public final class FriendRequestProtocol : NSObject {
guard let thread = thread as? TSContactThread else { return .none } guard let thread = thread as? TSContactThread else { return .none }
// If this is a note to self then we don't want to show the friend request // If this is a note to self then we don't want to show the friend request
guard !thread.isNoteToSelf() else { return .none } guard !thread.isNoteToSelf() else { return .none }
// Gather friend request statuses for all linked devices
var friendRequestStatuses: [LKFriendRequestStatus] = [] var friendRequestStatuses: [LKFriendRequestStatus] = []
storage.dbReadConnection.read { transaction in storage.dbReadConnection.read { transaction in
let linkedDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: thread.contactIdentifier(), in: transaction) let linkedDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: thread.contactIdentifier(), in: transaction)
@ -89,9 +90,10 @@ public final class FriendRequestProtocol : NSObject {
storage.getFriendRequestStatus(for: $0, transaction: transaction) storage.getFriendRequestStatus(for: $0, transaction: transaction)
} }
} }
// Return
if friendRequestStatuses.contains(where: { $0 == .friends }) { return .friends } if friendRequestStatuses.contains(where: { $0 == .friends }) { return .friends }
if friendRequestStatuses.contains(where: { $0 == .requestReceived }) { return .received } if friendRequestStatuses.contains(where: { $0 == .requestReceived }) { return .received }
if friendRequestStatuses.contains(where: { $0 == .requestSent }) { return .sent } if friendRequestStatuses.contains(where: { $0 == .requestSent || $0 == .requestSending }) { return .sent }
return .none return .none
} }

Loading…
Cancel
Save