Implement expiration timer update

pull/308/head
nielsandriesse 4 years ago
parent 1644f078fe
commit d407467279

@ -1,5 +1,51 @@
import SessionUtilities
@objc(SNExpirationTimerUpdate)
public final class ExpirationTimerUpdate : ControlMessage {
public var duration: UInt32?
// MARK: Initialization
init(sentTimestamp: UInt64, receivedTimestamp: UInt64, duration: UInt32) {
super.init()
self.sentTimestamp = sentTimestamp
self.receivedTimestamp = receivedTimestamp
self.duration = duration
}
// MARK: Coding
public required init?(coder: NSCoder) {
super.init(coder: coder)
if let duration = coder.decodeObject(forKey: "duration") as! UInt32? { self.duration = duration }
}
public override func encode(with coder: NSCoder) {
super.encode(with: coder)
coder.encode(duration, forKey: "duration")
}
// MARK: Proto Conversion
public override class func fromProto(_ proto: SNProtoContent) -> ExpirationTimerUpdate? {
guard let data = proto.dataMessage else { return nil }
let isExpirationTimerUpdate = (data.flags & UInt32(SNProtoDataMessage.SNProtoDataMessageFlags.expirationTimerUpdate.rawValue)) != 0
guard isExpirationTimerUpdate else { return nil }
let timestamp = data.timestamp
let now = NSDate.millisecondTimestamp()
let duration = data.expireTimer
return ExpirationTimerUpdate(sentTimestamp: timestamp, receivedTimestamp: now, duration: duration)
}
public override func toProto() -> SNProtoContent? {
guard let duration = duration else { return nil }
let expirationTimerUpdateProto = SNProtoDataMessage.builder()
expirationTimerUpdateProto.setFlags(UInt32(SNProtoDataMessage.SNProtoDataMessageFlags.expirationTimerUpdate.rawValue))
expirationTimerUpdateProto.setExpireTimer(duration)
let contentProto = SNProtoContent.builder()
do {
contentProto.setDataMessage(try expirationTimerUpdateProto.build())
return try contentProto.build()
} catch {
SNLog("Couldn't construct expiration timer update proto from: \(self).")
return nil
}
}
}

@ -34,9 +34,7 @@ public final class TypingIndicator : ControlMessage {
// MARK: Coding
public required init?(coder: NSCoder) {
super.init(coder: coder)
if let rawKind = coder.decodeObject(forKey: "kind") as! String? {
kind = Kind(rawValue: rawKind)
}
if let rawKind = coder.decodeObject(forKey: "kind") as! String? { kind = Kind(rawValue: rawKind) }
}
public override func encode(with coder: NSCoder) {
@ -46,10 +44,7 @@ public final class TypingIndicator : ControlMessage {
// MARK: Proto Conversion
public override class func fromProto(_ proto: SNProtoContent) -> TypingIndicator? {
guard let typingIndicatorProto = proto.typingMessage else {
SNLog("Couldn't parse typing indicator from: \(proto).")
return nil
}
guard let typingIndicatorProto = proto.typingMessage else { return nil }
let timestamp = typingIndicatorProto.timestamp
let now = NSDate.millisecondTimestamp()
let kind = Kind.fromProto(typingIndicatorProto.action)

@ -11,7 +11,10 @@ public class Message : NSObject, NSCoding { // Not a protocol for YapDatabase co
// MARK: Coding
public required init?(coder: NSCoder) {
preconditionFailure("init?(coder:) is abstract and must be overridden.")
if let id = coder.decodeObject(forKey: "id") as! String? { self.id = id }
if let threadID = coder.decodeObject(forKey: "threadID") as! String? { self.threadID = threadID }
if let sentTimestamp = coder.decodeObject(forKey: "sentTimestamp") as! UInt64? { self.sentTimestamp = sentTimestamp }
if let receivedTimestamp = coder.decodeObject(forKey: "receivedTimestamp") as! UInt64? { self.receivedTimestamp = receivedTimestamp }
}
public func encode(with coder: NSCoder) {

Loading…
Cancel
Save