mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			92 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Swift
		
	
import SessionUtilitiesKit
 | 
						|
 | 
						|
@objc(SNExpirationTimerUpdate)
 | 
						|
public final class ExpirationTimerUpdate : ControlMessage {
 | 
						|
    /// In the case of a sync message, the public key of the person the message was targeted at.
 | 
						|
    ///
 | 
						|
    /// - Note: `nil` if this isn't a sync message.
 | 
						|
    public var syncTarget: String?
 | 
						|
    public var duration: UInt32?
 | 
						|
 | 
						|
    public override var isSelfSendValid: Bool { true }
 | 
						|
 | 
						|
    // MARK: Initialization
 | 
						|
    public override init() { super.init() }
 | 
						|
    
 | 
						|
    internal init(syncTarget: String?, duration: UInt32) {
 | 
						|
        super.init()
 | 
						|
        self.syncTarget = syncTarget
 | 
						|
        self.duration = duration
 | 
						|
    }
 | 
						|
 | 
						|
    // MARK: Validation
 | 
						|
    public override var isValid: Bool {
 | 
						|
        guard super.isValid else { return false }
 | 
						|
        return duration != nil
 | 
						|
    }
 | 
						|
 | 
						|
    // MARK: Coding
 | 
						|
    public required init?(coder: NSCoder) {
 | 
						|
        super.init(coder: coder)
 | 
						|
        if let syncTarget = coder.decodeObject(forKey: "syncTarget") as! String? { self.syncTarget = syncTarget }
 | 
						|
        if let duration = coder.decodeObject(forKey: "durationSeconds") as! UInt32? { self.duration = duration }
 | 
						|
    }
 | 
						|
 | 
						|
    public override func encode(with coder: NSCoder) {
 | 
						|
        super.encode(with: coder)
 | 
						|
        coder.encode(syncTarget, forKey: "syncTarget")
 | 
						|
        coder.encode(duration, forKey: "durationSeconds")
 | 
						|
    }
 | 
						|
 | 
						|
    // MARK: Proto Conversion
 | 
						|
    public override class func fromProto(_ proto: SNProtoContent) -> ExpirationTimerUpdate? {
 | 
						|
        guard let dataMessageProto = proto.dataMessage else { return nil }
 | 
						|
        let isExpirationTimerUpdate = (dataMessageProto.flags & UInt32(SNProtoDataMessage.SNProtoDataMessageFlags.expirationTimerUpdate.rawValue)) != 0
 | 
						|
        guard isExpirationTimerUpdate else { return nil }
 | 
						|
        let syncTarget = dataMessageProto.syncTarget
 | 
						|
        let duration = dataMessageProto.expireTimer
 | 
						|
        return ExpirationTimerUpdate(syncTarget: syncTarget, duration: duration)
 | 
						|
    }
 | 
						|
 | 
						|
    public override func toProto(using transaction: YapDatabaseReadWriteTransaction) -> SNProtoContent? {
 | 
						|
        guard let duration = duration else {
 | 
						|
            SNLog("Couldn't construct expiration timer update proto from: \(self).")
 | 
						|
            return nil
 | 
						|
        }
 | 
						|
        let dataMessageProto = SNProtoDataMessage.builder()
 | 
						|
        dataMessageProto.setFlags(UInt32(SNProtoDataMessage.SNProtoDataMessageFlags.expirationTimerUpdate.rawValue))
 | 
						|
        dataMessageProto.setExpireTimer(duration)
 | 
						|
        if let syncTarget = syncTarget { dataMessageProto.setSyncTarget(syncTarget) }
 | 
						|
        // Group context
 | 
						|
        do {
 | 
						|
            try setGroupContextIfNeeded(on: dataMessageProto, using: transaction)
 | 
						|
        } catch {
 | 
						|
            SNLog("Couldn't construct expiration timer update proto from: \(self).")
 | 
						|
            return nil
 | 
						|
        }
 | 
						|
        let contentProto = SNProtoContent.builder()
 | 
						|
        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 override var description: String {
 | 
						|
        """
 | 
						|
        ExpirationTimerUpdate(
 | 
						|
            syncTarget: \(syncTarget ?? "null"),
 | 
						|
            duration: \(duration?.description ?? "null")
 | 
						|
        )
 | 
						|
        """
 | 
						|
    }
 | 
						|
    
 | 
						|
    // MARK: Convenience
 | 
						|
    @objc public func setDuration(_ duration: UInt32) {
 | 
						|
        self.duration = duration
 | 
						|
    }
 | 
						|
}
 |