Accepting keychange only resends to single recipient (#18)

// FREEBIE
pull/1/head
Michael Kirk 9 years ago committed by GitHub
parent d66c8bd427
commit 36cab4691c

@ -58,22 +58,39 @@
return message;
}
- (void)acceptNewIdentityKey {
[[TSStorageManager sharedManager] saveRemoteIdentity:[self newKey] recipientId:_recipientId];
- (void)acceptNewIdentityKey
{
[[TSStorageManager sharedManager] saveRemoteIdentity:[self newKey] recipientId:self.recipientId];
__block TSOutgoingMessage *message;
__block TSThread *thread;
__block SignalRecipient *recipient;
[[TSStorageManager sharedManager]
.newDatabaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
thread = [TSContactThread fetchObjectWithUniqueID:self.uniqueThreadId transaction:transaction];
message = [TSOutgoingMessage fetchObjectWithUniqueID:_messageId transaction:transaction];
[[TSStorageManager sharedManager].newDatabaseConnection
readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
thread = [TSContactThread fetchObjectWithUniqueID:self.uniqueThreadId transaction:transaction];
message = [TSOutgoingMessage fetchObjectWithUniqueID:self.messageId transaction:transaction];
recipient = [SignalRecipient fetchObjectWithUniqueID:self.recipientId transaction:transaction];
[self removeWithTransaction:transaction];
}];
[self removeWithTransaction:transaction];
}];
if (message) {
[[TSMessagesManager sharedManager] sendMessage:message inThread:thread success:nil failure:nil];
void (^logSuccess)() = ^void() {
DDLogInfo(@"Successfully redelivered message to recipient after accepting new key.");
};
void (^logFailure)() = ^void() {
DDLogWarn(@"Failed to redeliver message to recipient after accepting new key.");
};
// Resend to single recipient
[[TSMessagesManager sharedManager] resendMessage:message
toRecipient:recipient
inThread:thread
success:logSuccess
failure:logFailure];
}
}

@ -18,4 +18,10 @@ typedef void (^failedSendingCompletionBlock)();
success:(successSendingCompletionBlock)successCompletionBlock
failure:(failedSendingCompletionBlock)failedCompletionBlock;
- (void)resendMessage:(TSOutgoingMessage *)message
toRecipient:(SignalRecipient *)recipient
inThread:(TSThread *)thread
success:(successSendingCompletionBlock)successCompletionBlock
failure:(failedSendingCompletionBlock)failedCompletionBlock;
@end

@ -84,6 +84,27 @@ dispatch_queue_t sendingQueue() {
return [ContactsUpdater sharedUpdater];
}
- (void)resendMessage:(TSOutgoingMessage *)message
toRecipient:(SignalRecipient *)recipient
inThread:(TSThread *)thread
success:(successSendingCompletionBlock)successCompletionBlock
failure:(failedSendingCompletionBlock)failedCompletionBlock
{
if ([thread isKindOfClass:[TSGroupThread class]]) {
dispatch_async(sendingQueue(), ^{
TSGroupThread *groupThread = (TSGroupThread *)thread;
[self groupSend:@[ recipient ] // Avoid spamming entire group when resending failed message.
Message:message
inThread:thread
success:successCompletionBlock
failure:failedCompletionBlock];
});
} else {
[self sendMessage:message inThread:thread success:successCompletionBlock failure:failedCompletionBlock];
}
}
- (void)sendMessage:(TSOutgoingMessage *)message
inThread:(TSThread *)thread
success:(successSendingCompletionBlock)successCompletionBlock
@ -91,7 +112,6 @@ dispatch_queue_t sendingQueue() {
dispatch_async(sendingQueue(), ^{
if ([thread isKindOfClass:[TSGroupThread class]]) {
TSGroupThread *groupThread = (TSGroupThread *)thread;
[self saveGroupMessage:message inThread:thread];
[self getRecipients:groupThread.groupModel.groupMemberIds
success:^(NSArray<SignalRecipient *> *recipients) {
[self groupSend:recipients
@ -177,7 +197,9 @@ dispatch_queue_t sendingQueue() {
Message:(TSOutgoingMessage *)message
inThread:(TSThread *)thread
success:(successSendingCompletionBlock)successBlock
failure:(failedSendingCompletionBlock)failureBlock {
failure:(failedSendingCompletionBlock)failureBlock
{
[self saveGroupMessage:message inThread:thread];
NSMutableArray<TOCFuture *> *futures = [NSMutableArray array];
for (SignalRecipient *rec in recipients) {

Loading…
Cancel
Save