mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
fix when a close group created, members will receive a session out of sync message
This commit is contained in:
parent
6187926685
commit
25251f172d
|
@ -32,21 +32,19 @@ public final class ClosedGroupsProtocol : NSObject {
|
|||
return !thread.isUserAdmin(inGroup: hexEncodedPublicKey, transaction: transaction)
|
||||
}
|
||||
|
||||
@objc(establishSessionsIfNeededWithClosedGroupMembers:in:)
|
||||
public static func establishSessionsIfNeeded(with closedGroupMembers: [String], in thread: TSGroupThread) {
|
||||
storage.dbReadWriteConnection.readWrite { transaction in
|
||||
closedGroupMembers.forEach { hexEncodedPublicKey in
|
||||
guard hexEncodedPublicKey != getUserHexEncodedPublicKey() else { return }
|
||||
let hasSession = storage.containsSession(hexEncodedPublicKey, deviceId: Int32(OWSDevicePrimaryDeviceId), protocolContext: transaction)
|
||||
guard !hasSession else { return }
|
||||
let thread = TSContactThread.getOrCreateThread(withContactId: hexEncodedPublicKey, transaction: transaction)
|
||||
thread.save(with: transaction)
|
||||
let sessionRequestMessage = SessionRequestMessage(thread: thread)
|
||||
let messageSenderJobQueue = SSKEnvironment.shared.messageSenderJobQueue
|
||||
// This has to happen sync to ensure that session requests get sent before AFRs do (it's
|
||||
// asssumed that the master device first syncs closed groups first and contacts after that).
|
||||
messageSenderJobQueue.add(message: sessionRequestMessage, transaction: transaction)
|
||||
}
|
||||
@objc(establishSessionsIfNeededWithClosedGroupMembers:in:using:)
|
||||
public static func establishSessionsIfNeeded(with closedGroupMembers: [String], in thread: TSGroupThread, using transaction: YapDatabaseReadWriteTransaction) {
|
||||
closedGroupMembers.forEach { hexEncodedPublicKey in
|
||||
guard hexEncodedPublicKey != getUserHexEncodedPublicKey() else { return }
|
||||
let hasSession = storage.containsSession(hexEncodedPublicKey, deviceId: Int32(OWSDevicePrimaryDeviceId), protocolContext: transaction)
|
||||
guard !hasSession else { return }
|
||||
let thread = TSContactThread.getOrCreateThread(withContactId: hexEncodedPublicKey, transaction: transaction)
|
||||
thread.save(with: transaction)
|
||||
let sessionRequestMessage = SessionRequestMessage(thread: thread)
|
||||
let messageSenderJobQueue = SSKEnvironment.shared.messageSenderJobQueue
|
||||
// This has to happen sync to ensure that session requests get sent before AFRs do (it's
|
||||
// asssumed that the master device first syncs closed groups first and contacts after that).
|
||||
messageSenderJobQueue.add(message: sessionRequestMessage, transaction: transaction)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -136,7 +136,7 @@ public final class SyncMessagesProtocol : NSObject {
|
|||
newGroupThread.groupModel = newGroupModel // TODO: Should this use the setGroupModel method on TSGroupThread?
|
||||
newGroupThread.save(with: transaction)
|
||||
// Try to establish sessions with all members for which none exists yet when a group is created or updated
|
||||
ClosedGroupsProtocol.establishSessionsIfNeeded(with: members, in: newGroupThread)
|
||||
ClosedGroupsProtocol.establishSessionsIfNeeded(with: members, in: newGroupThread, using: transaction)
|
||||
OWSDisappearingMessagesJob.shared().becomeConsistent(withDisappearingDuration: transcript.dataMessage.expireTimer, thread: newGroupThread, createdByRemoteRecipientId: nil, createdInExistingGroup: true, transaction: transaction)
|
||||
let groupUpdatedMessage = TSInfoMessage(timestamp: NSDate.ows_millisecondTimeStamp(), in: newGroupThread, messageType: .typeGroupUpdate, customMessage: groupUpdatedMessageDescription)
|
||||
groupUpdatedMessage.save(with: transaction)
|
||||
|
@ -207,7 +207,7 @@ public final class SyncMessagesProtocol : NSObject {
|
|||
thread = TSGroupThread.getOrCreateThread(with: groupModel, transaction: transaction)
|
||||
thread.save(with: transaction)
|
||||
}
|
||||
ClosedGroupsProtocol.establishSessionsIfNeeded(with: groupModel.groupMemberIds, in: thread)
|
||||
ClosedGroupsProtocol.establishSessionsIfNeeded(with: groupModel.groupMemberIds, in: thread, using: transaction)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1342,7 +1342,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
BOOL wasCurrentUserRemovedFromGroup = [removedMemberIds containsObject:userMasterHexEncodedPublicKey];
|
||||
if (!wasCurrentUserRemovedFromGroup) {
|
||||
// Loki: Try to establish sessions with all members when a group is created or updated
|
||||
[LKClosedGroupsProtocol establishSessionsIfNeededWithClosedGroupMembers:newMemberIds.allObjects in:newGroupThread];
|
||||
[LKClosedGroupsProtocol establishSessionsIfNeededWithClosedGroupMembers:newMemberIds.allObjects in:newGroupThread using:transaction];
|
||||
}
|
||||
|
||||
[[OWSDisappearingMessagesJob sharedJob] becomeConsistentWithDisappearingDuration:dataMessage.expireTimer
|
||||
|
|
Loading…
Reference in a new issue