2020-11-05 04:16:45 +01:00
|
|
|
|
|
|
|
/// Abstract base class for `VisibleMessage` and `ControlMessage`.
|
|
|
|
@objc(SNMessage)
|
2020-11-07 23:00:10 +01:00
|
|
|
public class Message : NSObject, NSCoding { // NSObject/NSCoding conformance is needed for YapDatabase compatibility
|
2020-11-05 04:16:45 +01:00
|
|
|
public var id: String?
|
|
|
|
public var threadID: String?
|
|
|
|
public var sentTimestamp: UInt64?
|
|
|
|
public var receivedTimestamp: UInt64?
|
2020-11-06 01:41:01 +01:00
|
|
|
public var recipient: String?
|
2020-11-17 06:23:13 +01:00
|
|
|
public var sender: String?
|
2020-11-18 05:53:45 +01:00
|
|
|
public var groupPublicKey: String?
|
|
|
|
public var openGroupServerMessageID: UInt64?
|
2020-11-05 04:16:45 +01:00
|
|
|
|
2020-11-07 23:00:10 +01:00
|
|
|
public class var ttl: UInt64 { 2 * 24 * 60 * 60 * 1000 }
|
|
|
|
|
2020-11-05 06:10:49 +01:00
|
|
|
public override init() { }
|
|
|
|
|
2020-11-06 06:28:06 +01:00
|
|
|
// MARK: Validation
|
2020-11-17 06:23:13 +01:00
|
|
|
public var isValid: Bool {
|
|
|
|
if let sentTimestamp = sentTimestamp { guard sentTimestamp > 0 else { return false } }
|
|
|
|
if let receivedTimestamp = receivedTimestamp { guard receivedTimestamp > 0 else { return false } }
|
|
|
|
return sender != nil && recipient != nil
|
|
|
|
}
|
2020-11-06 06:28:06 +01:00
|
|
|
|
2020-11-06 00:43:34 +01:00
|
|
|
// MARK: Coding
|
2020-11-05 04:16:45 +01:00
|
|
|
public required init?(coder: NSCoder) {
|
2020-11-06 00:59:04 +01:00
|
|
|
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 }
|
2020-11-06 01:41:01 +01:00
|
|
|
if let recipient = coder.decodeObject(forKey: "recipient") as! String? { self.recipient = recipient }
|
2020-11-05 04:16:45 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public func encode(with coder: NSCoder) {
|
2020-11-06 00:43:34 +01:00
|
|
|
coder.encode(id, forKey: "id")
|
|
|
|
coder.encode(threadID, forKey: "threadID")
|
|
|
|
coder.encode(sentTimestamp, forKey: "sentTimestamp")
|
|
|
|
coder.encode(receivedTimestamp, forKey: "receivedTimestamp")
|
2020-11-06 01:41:01 +01:00
|
|
|
coder.encode(recipient, forKey: "recipient")
|
2020-11-05 04:16:45 +01:00
|
|
|
}
|
2020-11-05 06:10:49 +01:00
|
|
|
|
2020-11-06 00:43:34 +01:00
|
|
|
// MARK: Proto Conversion
|
|
|
|
public class func fromProto(_ proto: SNProtoContent) -> Self? {
|
|
|
|
preconditionFailure("fromProto(_:) is abstract and must be overridden.")
|
2020-11-05 06:10:49 +01:00
|
|
|
}
|
|
|
|
|
2020-11-06 00:43:34 +01:00
|
|
|
public func toProto() -> SNProtoContent? {
|
|
|
|
preconditionFailure("toProto() is abstract and must be overridden.")
|
2020-11-05 06:10:49 +01:00
|
|
|
}
|
2020-11-05 04:16:45 +01:00
|
|
|
}
|