add expiration timer to configuration message
This commit is contained in:
parent
a840d61f4e
commit
2f0fe36905
|
@ -101,15 +101,17 @@ extension ConfigurationMessage {
|
|||
public let encryptionKeyPair: ECKeyPair
|
||||
public let members: Set<String>
|
||||
public let admins: Set<String>
|
||||
public let expirationTimer: UInt32
|
||||
|
||||
public var isValid: Bool { !members.isEmpty && !admins.isEmpty }
|
||||
|
||||
public init(publicKey: String, name: String, encryptionKeyPair: ECKeyPair, members: Set<String>, admins: Set<String>) {
|
||||
public init(publicKey: String, name: String, encryptionKeyPair: ECKeyPair, members: Set<String>, admins: Set<String>, expirationTimer: UInt32) {
|
||||
self.publicKey = publicKey
|
||||
self.name = name
|
||||
self.encryptionKeyPair = encryptionKeyPair
|
||||
self.members = members
|
||||
self.admins = admins
|
||||
self.expirationTimer = expirationTimer
|
||||
}
|
||||
|
||||
public required init?(coder: NSCoder) {
|
||||
|
@ -118,11 +120,13 @@ extension ConfigurationMessage {
|
|||
let encryptionKeyPair = coder.decodeObject(forKey: "encryptionKeyPair") as! ECKeyPair?,
|
||||
let members = coder.decodeObject(forKey: "members") as! Set<String>?,
|
||||
let admins = coder.decodeObject(forKey: "admins") as! Set<String>? else { return nil }
|
||||
let expirationTimer = coder.decodeObject(forKey: "expirationTimer") as? UInt32 ?? 0
|
||||
self.publicKey = publicKey
|
||||
self.name = name
|
||||
self.encryptionKeyPair = encryptionKeyPair
|
||||
self.members = members
|
||||
self.admins = admins
|
||||
self.expirationTimer = expirationTimer
|
||||
}
|
||||
|
||||
public func encode(with coder: NSCoder) {
|
||||
|
@ -131,6 +135,7 @@ extension ConfigurationMessage {
|
|||
coder.encode(encryptionKeyPair, forKey: "encryptionKeyPair")
|
||||
coder.encode(members, forKey: "members")
|
||||
coder.encode(admins, forKey: "admins")
|
||||
coder.encode(expirationTimer, forKey: "expirationTimer")
|
||||
}
|
||||
|
||||
public static func fromProto(_ proto: SNProtoConfigurationMessageClosedGroup) -> ClosedGroup? {
|
||||
|
@ -146,7 +151,8 @@ extension ConfigurationMessage {
|
|||
}
|
||||
let members = Set(proto.members.map { $0.toHexString() })
|
||||
let admins = Set(proto.admins.map { $0.toHexString() })
|
||||
let result = ClosedGroup(publicKey: publicKey, name: name, encryptionKeyPair: encryptionKeyPair, members: members, admins: admins)
|
||||
let expirationTimer = proto.expirationTimer
|
||||
let result = ClosedGroup(publicKey: publicKey, name: name, encryptionKeyPair: encryptionKeyPair, members: members, admins: admins, expirationTimer: expirationTimer)
|
||||
guard result.isValid else { return nil }
|
||||
return result
|
||||
}
|
||||
|
@ -165,6 +171,7 @@ extension ConfigurationMessage {
|
|||
}
|
||||
result.setMembers(members.map { Data(hex: $0) })
|
||||
result.setAdmins(admins.map { Data(hex: $0) })
|
||||
result.setExpirationTimer(expirationTimer)
|
||||
do {
|
||||
return try result.build()
|
||||
} catch {
|
||||
|
|
|
@ -207,8 +207,7 @@ extension MessageReceiver {
|
|||
let allClosedGroupPublicKeys = storage.getUserClosedGroupPublicKeys()
|
||||
for closedGroup in message.closedGroups {
|
||||
guard !allClosedGroupPublicKeys.contains(closedGroup.publicKey) else { continue }
|
||||
handleNewClosedGroup(groupPublicKey: closedGroup.publicKey, name: closedGroup.name, encryptionKeyPair: closedGroup.encryptionKeyPair,
|
||||
members: [String](closedGroup.members), admins: [String](closedGroup.admins), expirationTimer: 0, messageSentTimestamp: message.sentTimestamp!, using: transaction)
|
||||
handleNewClosedGroup(groupPublicKey: closedGroup.publicKey, name: closedGroup.name, encryptionKeyPair: closedGroup.encryptionKeyPair, members: [String](closedGroup.members), admins: [String](closedGroup.admins), expirationTimer: closedGroup.expirationTimer, messageSentTimestamp: message.sentTimestamp!, using: transaction)
|
||||
}
|
||||
// Open groups
|
||||
for openGroupURL in message.openGroups {
|
||||
|
|
|
@ -22,7 +22,7 @@ extension ConfigurationMessage {
|
|||
guard storage.isClosedGroup(groupPublicKey),
|
||||
let encryptionKeyPair = storage.getLatestClosedGroupEncryptionKeyPair(for: groupPublicKey) else { return }
|
||||
let closedGroup = ClosedGroup(publicKey: groupPublicKey, name: thread.groupModel.groupName!, encryptionKeyPair: encryptionKeyPair,
|
||||
members: Set(thread.groupModel.groupMemberIds), admins: Set(thread.groupModel.groupAdminIds))
|
||||
members: Set(thread.groupModel.groupMemberIds), admins: Set(thread.groupModel.groupAdminIds), expirationTimer: thread.disappearingMessagesDuration(with: transaction))
|
||||
closedGroups.insert(closedGroup)
|
||||
case .openGroup:
|
||||
if let v2OpenGroup = storage.getV2OpenGroup(for: thread.uniqueId!) {
|
||||
|
|
Loading…
Reference in New Issue