Merge pull request #188 from loki-project/closed-group-fix
Fix sending messages to our devices in groups.
This commit is contained in:
commit
139aa2f85a
|
@ -27,13 +27,7 @@ public final class SessionMetaProtocol : NSObject {
|
|||
}
|
||||
|
||||
public static func getDestinationsForOutgoingSyncMessage() -> Set<String> {
|
||||
var result: Set<String> = []
|
||||
storage.dbReadConnection.read { transaction in
|
||||
// Aim the message at all linked devices, including this one
|
||||
// TODO: Should we exclude the current device?
|
||||
result = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: getUserHexEncodedPublicKey(), in: transaction)
|
||||
}
|
||||
return result
|
||||
return MultiDeviceProtocol.getUserLinkedDevices()
|
||||
}
|
||||
|
||||
@objc(getDestinationsForOutgoingGroupMessage:inThread:)
|
||||
|
@ -53,7 +47,9 @@ public final class SessionMetaProtocol : NSObject {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
result = Set(outgoingGroupMessage.sendingRecipientIds()).intersection(thread.groupModel.groupMemberIds) // This is what Signal does
|
||||
result = Set(outgoingGroupMessage.sendingRecipientIds())
|
||||
.intersection(thread.groupModel.groupMemberIds)
|
||||
.subtracting(MultiDeviceProtocol.getUserLinkedDevices())
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
@ -73,6 +69,7 @@ public final class SessionMetaProtocol : NSObject {
|
|||
// MARK: Transcripts
|
||||
@objc(shouldSendTranscriptForMessage:in:)
|
||||
public static func shouldSendTranscript(for message: TSOutgoingMessage, in thread: TSThread) -> Bool {
|
||||
guard message.shouldSyncTranscript() else { return false }
|
||||
let isOpenGroupMessage = (thread as? TSGroupThread)?.isPublicChat == true
|
||||
let wouldSignalRequireTranscript = (AreRecipientUpdatesEnabled() || !message.hasSyncedTranscript)
|
||||
guard wouldSignalRequireTranscript && !isOpenGroupMessage else { return false }
|
||||
|
@ -81,7 +78,7 @@ public final class SessionMetaProtocol : NSObject {
|
|||
usesMultiDevice = !storage.getDeviceLinks(for: getUserHexEncodedPublicKey(), in: transaction).isEmpty
|
||||
|| UserDefaults.standard[.masterHexEncodedPublicKey] != nil
|
||||
}
|
||||
return usesMultiDevice && isThreadNoteToSelf(thread)
|
||||
return usesMultiDevice
|
||||
}
|
||||
|
||||
// MARK: Typing Indicators
|
||||
|
|
|
@ -259,6 +259,14 @@ public final class MultiDeviceProtocol : NSObject {
|
|||
}
|
||||
|
||||
// MARK: - General
|
||||
public static func getUserLinkedDevices() -> Set<String> {
|
||||
var result: Set<String> = []
|
||||
storage.dbReadConnection.read { transaction in
|
||||
result = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: getUserHexEncodedPublicKey(), in: transaction)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
@objc public static func isSlaveThread(_ thread: TSThread) -> Bool {
|
||||
guard let thread = thread as? TSContactThread else { return false }
|
||||
var isSlaveThread = false
|
||||
|
|
|
@ -506,12 +506,21 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
|||
OWSAssertDebug(message);
|
||||
OWSAssertDebug(errorHandle);
|
||||
|
||||
NSString *userHexEncodedPublicKey = self.tsAccountManager.localNumber;
|
||||
|
||||
__block NSMutableSet<NSString *> *recipientIds = [NSMutableSet new];
|
||||
if ([message isKindOfClass:[OWSOutgoingSyncMessage class]]) {
|
||||
recipientIds = [LKSessionMetaProtocol getDestinationsForOutgoingSyncMessage];
|
||||
} else if (thread.isGroupThread) {
|
||||
TSGroupThread *groupThread = (TSGroupThread *)thread;
|
||||
recipientIds = [LKSessionMetaProtocol getDestinationsForOutgoingGroupMessage:message inThread:thread];
|
||||
__block NSString *userMasterHexEncodedPublicKey;
|
||||
[OWSPrimaryStorage.sharedManager.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
|
||||
userMasterHexEncodedPublicKey = [LKDatabaseUtilities getMasterHexEncodedPublicKeyFor:userHexEncodedPublicKey in:transaction] ?: userHexEncodedPublicKey;
|
||||
}];
|
||||
if ([recipientIds containsObject:userMasterHexEncodedPublicKey]) {
|
||||
OWSFailDebug(@"Message send recipients should not include self.");
|
||||
}
|
||||
} else if ([thread isKindOfClass:[TSContactThread class]]) {
|
||||
NSString *recipientContactId = ((TSContactThread *)thread).contactIdentifier;
|
||||
|
||||
|
|
Loading…
Reference in New Issue