Merge pull request #679 from mpretty-cyro/fix/migration-crash

Fixed an issue which could cause the DB migration to fail for users with closed groups
pull/681/head
Morgan Pretty 2 years ago committed by GitHub
commit 7c7193f198
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -348,10 +348,14 @@ public struct Interaction: Codable, Identifiable, Equatable, FetchableRecord, Mu
).insert(db) ).insert(db)
case .closedGroup: case .closedGroup:
guard let closedGroupMemberIds: Set<String> = (try? GroupMember
let closedGroup: ClosedGroup = try? thread.closedGroup.fetchOne(db), .select(.profileId)
let members: [GroupMember] = try? closedGroup.members.fetchAll(db) .filter(GroupMember.Columns.groupId == thread.id)
else { .asRequest(of: String.self)
.fetchSet(db))
.defaulting(to: [])
guard !closedGroupMemberIds.isEmpty else {
SNLog("Inserted an interaction but couldn't find it's associated thread members") SNLog("Inserted an interaction but couldn't find it's associated thread members")
return return
} }
@ -359,12 +363,12 @@ public struct Interaction: Codable, Identifiable, Equatable, FetchableRecord, Mu
// Exclude the current user when creating recipient states (as they will never // Exclude the current user when creating recipient states (as they will never
// receive the message resulting in the message getting flagged as failed) // receive the message resulting in the message getting flagged as failed)
let userPublicKey: String = getUserHexEncodedPublicKey(db) let userPublicKey: String = getUserHexEncodedPublicKey(db)
try members try closedGroupMemberIds
.filter { member -> Bool in member.profileId != userPublicKey } .filter { memberId -> Bool in memberId != userPublicKey }
.forEach { member in .forEach { memberId in
try RecipientState( try RecipientState(
interactionId: interactionId, interactionId: interactionId,
recipientId: member.profileId, recipientId: memberId,
state: .sending state: .sending
).insert(db) ).insert(db)
} }

Loading…
Cancel
Save