|  |  |  | // Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import Foundation | 
					
						
							|  |  |  | import GRDB | 
					
						
							|  |  |  | import SessionUtilitiesKit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public extension VisibleMessage { | 
					
						
							|  |  |  |     struct VMOpenGroupInvitation: Codable { | 
					
						
							|  |  |  |         public let name: String? | 
					
						
							|  |  |  |         public let url: String? | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         // MARK: - Initialization | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         public init(name: String, url: String) { | 
					
						
							|  |  |  |             self.name = name | 
					
						
							|  |  |  |             self.url = url | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // MARK: - Proto Conversion | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         public static func fromProto(_ proto: SNProtoDataMessageOpenGroupInvitation) -> VMOpenGroupInvitation? { | 
					
						
							|  |  |  |             return VMOpenGroupInvitation( | 
					
						
							|  |  |  |                 name: proto.name, | 
					
						
							|  |  |  |                 url: proto.url | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         public func toProto() -> SNProtoDataMessageOpenGroupInvitation? { | 
					
						
							|  |  |  |             guard let url = url, let name = name else { | 
					
						
							|  |  |  |                 SNLog("Couldn't construct open group invitation proto from: \(self).") | 
					
						
							|  |  |  |                 return nil | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             let openGroupInvitationProto = SNProtoDataMessageOpenGroupInvitation.builder(url: url, name: name) | 
					
						
							|  |  |  |             do { | 
					
						
							|  |  |  |                 return try openGroupInvitationProto.build() | 
					
						
							|  |  |  |             } catch { | 
					
						
							|  |  |  |                 SNLog("Couldn't construct open group invitation proto from: \(self).") | 
					
						
							|  |  |  |                 return nil | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         // MARK: - Description | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         public var description: String { | 
					
						
							|  |  |  |             """
 | 
					
						
							|  |  |  |             OpenGroupInvitation( | 
					
						
							|  |  |  |                 name: \(name ?? "null"), | 
					
						
							|  |  |  |                 url: \(url ?? "null") | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |             """
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // MARK: - Database Type Conversion | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public extension VisibleMessage.VMOpenGroupInvitation { | 
					
						
							|  |  |  |     static func from(_ db: Database, linkPreview: LinkPreview) -> VisibleMessage.VMOpenGroupInvitation? { | 
					
						
							|  |  |  |         guard let name: String = linkPreview.title else { return nil } | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         return VisibleMessage.VMOpenGroupInvitation( | 
					
						
							|  |  |  |             name: name, | 
					
						
							|  |  |  |             url: linkPreview.url | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |