Update friend request acceptance for multi device

pull/63/head
Niels Andriesse 6 years ago
parent 8281b23ec6
commit 897147bbf5

@ -4430,8 +4430,27 @@ typedef enum : NSUInteger {
{
// Update the thread's friend request status
[self.thread saveFriendRequestStatus:LKThreadFriendRequestStatusFriends withTransaction:nil];
// Send a friend request accepted message
// Accept all outstanding friend requests associated with this user and try to establish sessions with the
// subset of their devices that haven't sent a friend request.
NSString *senderID = friendRequest.authorId;
NSMutableSet<TSContactThread *> *threads = [NSMutableSet new];
[OWSPrimaryStorage.sharedManager.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
NSString *masterHexEncodedPublicKey = [LKDatabaseUtilities getMasterHexEncodedPublicKeyFor:senderID in:transaction] ?: senderID;
NSSet<LKDeviceLink *> *deviceLinks = [LKDatabaseUtilities getDeviceLinksFor:masterHexEncodedPublicKey in:transaction];
for (LKDeviceLink *deviceLink in deviceLinks) {
[threads addObject:[TSContactThread getThreadWithContactId:deviceLink.master.hexEncodedPublicKey transaction:transaction]];
[threads addObject:[TSContactThread getThreadWithContactId:deviceLink.slave.hexEncodedPublicKey transaction:transaction]];
}
}];
for (TSContactThread *thread in threads) {
if (thread.hasPendingFriendRequest) {
[ThreadUtil enqueueFriendRequestAcceptanceMessageInThread:self.thread];
} else {
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
OWSMessageSend *automatedFriendRequestMessage = [messageSender getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:thread.contactIdentifier];
[messageSender sendMessage:automatedFriendRequestMessage];
}
}
}
- (void)declineFriendRequest:(TSIncomingMessage *)friendRequest

@ -1,7 +1,7 @@
public enum LokiMessageWrapper {
public enum WrappingError : LocalizedError {
public enum Error : LocalizedError {
case failedToWrapData
case failedToWrapMessageInEnvelope
case failedToWrapEnvelopeInWebSocketMessage
@ -24,7 +24,7 @@ public enum LokiMessageWrapper {
let webSocketMessage = try createWebSocketMessage(around: envelope)
return try webSocketMessage.serializedData()
} catch let error {
throw error as? WrappingError ?? WrappingError.failedToWrapData
throw error as? Error ?? Error.failedToWrapData
}
}
@ -36,12 +36,12 @@ public enum LokiMessageWrapper {
if let content = try Data(base64Encoded: message.content) {
builder.setContent(content)
} else {
throw WrappingError.failedToWrapMessageInEnvelope
throw Error.failedToWrapMessageInEnvelope
}
return try builder.build()
} catch let error {
print("[Loki] Failed to wrap message in envelope: \(error).")
throw WrappingError.failedToWrapMessageInEnvelope
throw Error.failedToWrapMessageInEnvelope
}
}
@ -54,7 +54,7 @@ public enum LokiMessageWrapper {
return try messageBuilder.build()
} catch let error {
print("[Loki] Failed to wrap envelope in web socket message: \(error).")
throw WrappingError.failedToWrapEnvelopeInWebSocketMessage
throw Error.failedToWrapEnvelopeInWebSocketMessage
}
}
@ -66,7 +66,7 @@ public enum LokiMessageWrapper {
return try SSKProtoEnvelope.parseData(envelope)
} catch let error {
print("[Loki] Failed to unwrap data: \(error).")
throw WrappingError.failedToUnwrapData
throw Error.failedToUnwrapData
}
}
}

@ -16,6 +16,7 @@ extern const NSUInteger kOversizeTextMessageSizeThreshold;
@class TSOutgoingMessage;
@class TSThread;
@class YapDatabaseReadWriteTransaction;
@class OWSMessageSend;
@protocol ContactsManagerProtocol;
@ -96,6 +97,9 @@ NS_SWIFT_NAME(MessageSender)
success:(void (^)(void))successHandler
failure:(void (^)(NSError *error))failureHandler;
- (OWSMessageSend *)getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:(NSString *)hexEncodedPublicKey;
- (void)sendMessage:(OWSMessageSend *)messageSend;
@end
#pragma mark -

Loading…
Cancel
Save