NetNewsWire/Frameworks/Account/FeedProvider/Reddit/RedditLink.swift

104 lines
2.3 KiB
Swift
Raw Normal View History

2020-05-04 21:42:34 +02:00
//
// 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?
2020-05-05 02:42:10 +02:00
let isVideo: Bool?
let media: RedditMedia?
2020-05-05 02:57:35 +02:00
let mediaEmbed: RedditMediaEmbed?
2020-05-06 03:17:46 +02:00
let preview: RedditPreview?
2020-05-04 21:42:34 +02:00
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"
2020-05-05 02:42:10 +02:00
case isVideo = "is_video"
case media = "media"
2020-05-05 02:57:35 +02:00
case mediaEmbed = "media_embed"
2020-05-06 03:17:46 +02:00
case preview = "preview"
2020-05-04 21:42:34 +02:00
}
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
2020-05-04 21:42:34 +02:00
}
if let urlHTML = renderURLAsHTML() {
html += urlHTML
2020-05-04 21:42:34 +02:00
}
return html
}
func renderURLAsHTML() -> String? {
guard let url = url else { return nil }
2020-05-05 02:42:10 +02:00
if isVideo ?? false {
guard let fallbackURL = media?.video?.fallbackURL else {
return nil
}
2020-05-06 03:17:46 +02:00
var html = "<video "
if let previewImageURL = preview?.images?.first?.source?.url {
html += "poster=\"\(previewImageURL)\" "
}
if let width = media?.video?.width, let height = media?.video?.height {
html += "width=\"\(width)\" height=\"\(height)\" "
}
html += "src=\"\(fallbackURL)\"></video>"
return html
2020-05-05 02:42:10 +02:00
}
if let imageSource = preview?.images?.first?.source, let imageURL = imageSource.url {
var html = "<figure><a href=\"\(url)\"><img src=\"\(imageURL)\" "
if let width = imageSource.width, let height = imageSource.height {
html += "width=\"\(width)\" height=\"\(height)\" "
}
html += "></a></figure>"
return html
}
if let mediaEmbedContent = mediaEmbed?.content {
return mediaEmbedContent
2020-05-04 21:42:34 +02:00
}
return nil
2020-05-04 21:42:34 +02:00
}
}