|  |  |  | // Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import Foundation | 
					
						
							|  |  |  | import GRDB | 
					
						
							|  |  |  | import SessionUtilitiesKit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public final class ExpirationTimerUpdate: ControlMessage { | 
					
						
							|  |  |  |     public override var isSelfSendValid: Bool { true } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // MARK: - Proto Conversion | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     public override class func fromProto(_ proto: SNProtoContent, sender: String) -> ExpirationTimerUpdate? { | 
					
						
							|  |  |  |         guard let dataMessageProto = proto.dataMessage else { return nil } | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         let isExpirationTimerUpdate = (dataMessageProto.flags & UInt32(SNProtoDataMessage.SNProtoDataMessageFlags.expirationTimerUpdate.rawValue)) != 0 | 
					
						
							|  |  |  |         guard isExpirationTimerUpdate else { return nil } | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         return ExpirationTimerUpdate() | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public override func toProto(_ db: Database, threadId: String) -> SNProtoContent? { | 
					
						
							|  |  |  |         let dataMessageProto = SNProtoDataMessage.builder() | 
					
						
							|  |  |  |         dataMessageProto.setFlags(UInt32(SNProtoDataMessage.SNProtoDataMessageFlags.expirationTimerUpdate.rawValue)) | 
					
						
							|  |  |  |         let contentProto = SNProtoContent.builder() | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         // DisappearingMessagesConfiguration | 
					
						
							|  |  |  |         setDisappearingMessagesConfigurationIfNeeded(on: contentProto) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         do { | 
					
						
							|  |  |  |             contentProto.setDataMessage(try dataMessageProto.build()) | 
					
						
							|  |  |  |             return try contentProto.build() | 
					
						
							|  |  |  |         } catch { | 
					
						
							|  |  |  |             SNLog("Couldn't construct expiration timer update proto from: \(self).") | 
					
						
							|  |  |  |             return nil | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // MARK: - Description | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     public var description: String { | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         ExpirationTimerUpdate() | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |