Move around logic to make functions have less side effects

pull/175/head
Mikunj 5 years ago
parent 97e7c76d4a
commit 8a6b2a2bc2

@ -111,11 +111,6 @@ public final class MultiDeviceProtocol : NSObject {
thread.isForceHidden = isSlaveDeviceThread // TODO: Could we make this computed?
thread.save(with: transaction)
// FIXME: I don't think this should be here, the function itself should just return a message
let friendRequestStatus = storage.getFriendRequestStatus(forContact: hexEncodedPublicKey, transaction: transaction)
if friendRequestStatus == .none || friendRequestStatus == .requestExpired {
storage.setFriendRequestStatus(.requestSent, forContact: hexEncodedPublicKey, transaction: transaction)
}
let result = FriendRequestMessage(outgoingMessageWithTimestamp: NSDate.ows_millisecondTimeStamp(), in: thread,
messageBody: "Please accept to enable messages to be synced across devices",
attachmentIds: [], expiresInSeconds: 0, expireStartedAt: 0, isVoiceMessage: false,
@ -135,11 +130,31 @@ public final class MultiDeviceProtocol : NSObject {
if let senderCertificate = senderCertificate {
recipientUDAccess = udManager.udAccess(forRecipientId: hexEncodedPublicKey, requireSyncAccess: true)
}
let friendRequestStatus = storage.getFriendRequestStatus(forContact: hexEncodedPublicKey, transaction: transaction)
if (friendRequestStatus == .none || friendRequestStatus == .requestExpired) {
storage.setFriendRequestStatus(.requestSending, forContact: hexEncodedPublicKey, transaction: transaction)
}
return OWSMessageSend(message: message, thread: thread, recipient: recipient, senderCertificate: senderCertificate,
udAccess: recipientUDAccess, localNumber: getUserHexEncodedPublicKey(), success: {
DispatchQueue.main.async {
storage.dbReadWriteConnection.readWrite { transaction in
let friendRequestStatus = storage.getFriendRequestStatus(forContact: hexEncodedPublicKey, transaction: transaction)
if (friendRequestStatus != .friends || friendRequestStatus != .requestReceived || friendRequestStatus != .requestSent) {
storage.setFriendRequestStatus(.requestSent, forContact: hexEncodedPublicKey, transaction: transaction)
}
}
}
}, failure: { _ in
DispatchQueue.main.async {
storage.dbReadWriteConnection.readWrite { transaction in
let friendRequestStatus = storage.getFriendRequestStatus(forContact: hexEncodedPublicKey, transaction: transaction)
if (friendRequestStatus != .friends || friendRequestStatus != .requestReceived || friendRequestStatus != .requestSent) {
storage.setFriendRequestStatus(.none, forContact: hexEncodedPublicKey, transaction: transaction)
}
}
}
})
}

@ -170,11 +170,16 @@ public final class SyncMessagesProtocol : NSObject {
let thread = TSContactThread.getOrCreateThread(withContactId: hexEncodedPublicKey, transaction: transaction)
let friendRequestStatus = storage.getFriendRequestStatus(forContact: hexEncodedPublicKey, transaction: transaction)
switch friendRequestStatus {
case .none:
case .none, .requestExpired:
let messageSender = SSKEnvironment.shared.messageSender
// TODO: Does the function below need to handle multi device??
// We need to send a FR message here directly to the user. Multi device doesn't come into play.
let autoGeneratedFRMessage = MultiDeviceProtocol.getAutoGeneratedMultiDeviceFRMessage(for: hexEncodedPublicKey, in: transaction)
thread.isForceHidden = true
thread.save(with: transaction)
storage.setFriendRequestStatus(.requestSending, forContact: hexEncodedPublicKey, transaction: transaction)
// This takes into account multi device
messageSender.send(autoGeneratedFRMessage, success: {
DispatchQueue.main.async {
@ -182,11 +187,13 @@ public final class SyncMessagesProtocol : NSObject {
autoGeneratedFRMessage.remove(with: transaction)
thread.isForceHidden = false
thread.save(with: transaction)
storage.setFriendRequestStatus(.requestSent, forContact: hexEncodedPublicKey, transaction: transaction)
}
}
}, failure: { error in
DispatchQueue.main.async {
storage.dbReadWriteConnection.readWrite { transaction in
storage.setFriendRequestStatus(friendRequestStatus, forContact: hexEncodedPublicKey, transaction: transaction)
autoGeneratedFRMessage.remove(with: transaction)
thread.isForceHidden = false
thread.save(with: transaction)

Loading…
Cancel
Save