// // RedditLink.swift // Account // // Created by Maurice Parker on 5/4/20. // Copyright © 2020 Ranchero Software, LLC. All rights reserved. // import Foundation struct RedditLink: Codable { let kind: String? let data: RedditLinkData? enum CodingKeys: String, CodingKey { case kind = "kind" case data = "data" } } struct RedditLinkData: Codable { let title: String? let permalink: String? let url: String? let id: String? let selfHTML: String? let selfText: String? let author: String? let created: Double? let isVideo: Bool? let media: RedditMedia? let mediaEmbed: RedditMediaEmbed? let preview: RedditPreview? enum CodingKeys: String, CodingKey { case title = "title" case permalink = "permalink" case url = "url" case id = "id" case selfHTML = "selftext_html" case selfText = "selftext" case author = "author" case created = "created_utc" case isVideo = "is_video" case media = "media" case mediaEmbed = "media_embed" case preview = "preview" } var createdDate: Date? { guard let created = created else { return nil } return Date(timeIntervalSince1970: created) } func renderAsHTML() -> String? { var html = String() if let selfHTML = selfHTML { html += selfHTML } if let urlHTML = renderURLAsHTML() { html += urlHTML } return html } func renderURLAsHTML() -> String? { guard let url = url else { return nil } if !url.hasPrefix("https://imgur.com"), let mediaEmbedContent = mediaEmbed?.content { return mediaEmbedContent } if url.hasSuffix(".gif") { return "
" } if isVideo ?? false, let videoURL = media?.video?.fallbackURL { var html = "" return html } if let videoPreviewURL = preview?.videoPreview?.url { var html = "" html += linkOutURL(url) return html } if let imageSource = preview?.images?.first?.source, let imageURL = imageSource.url { var html = "
String { guard let urlComponents = URLComponents(string: url), let host = urlComponents.host, !host.hasSuffix("reddit.com") else { return "" } return "
\(url)
" } }