import SessionUtilitiesKit public extension VisibleMessage { @objc(SNLinkPreview) class LinkPreview : NSObject, NSCoding { public var title: String? public var url: String? public var isValid: Bool { title != nil && url != nil } internal init(title: String?, url: String) { self.title = title self.url = url } public required init?(coder: NSCoder) { if let title = coder.decodeObject(forKey: "title") as! String? { self.title = title } if let url = coder.decodeObject(forKey: "urlString") as! String? { self.url = url } } public func encode(with coder: NSCoder) { coder.encode(title, forKey: "title") coder.encode(url, forKey: "urlString") } public static func fromProto(_ proto: SNProtoDataMessagePreview) -> LinkPreview? { let title = proto.title let url = proto.url return LinkPreview(title: title, url: url) } public func toProto() -> SNProtoDataMessagePreview? { guard let url = url else { SNLog("Couldn't construct link preview proto from: \(self).") return nil } let linkPreviewProto = SNProtoDataMessagePreview.builder(url: url) if let title = title { linkPreviewProto.setTitle(title) } do { return try linkPreviewProto.build() } catch { SNLog("Couldn't construct link preview proto from: \(self).") return nil } } } }