// // ArticleItemView.swift // NetNewsWire Widget Extension // // Created by Stuart Breckenridge on 18/11/20. // Copyright © 2020 Ranchero Software. All rights reserved. // import SwiftUI import RSWeb struct ArticleItemView: View { var article: LatestArticle var deepLink: URL @State private var iconImage: Image? var body: some View { Link(destination: deepLink, label: { HStack(alignment: .top, spacing: nil, content: { // Feed Icon if iconImage != nil { iconImage! .resizable() .frame(width: 30, height: 30) .cornerRadius(4) } // Title and Feed Name VStack(alignment: .leading) { Text(article.articleTitle ?? "Untitled") .font(.footnote) .bold() .lineLimit(1) .foregroundColor(.primary) .padding(.top, -3) HStack { Text(article.feedTitle) .font(.caption) .lineLimit(1) .foregroundColor(.secondary) Spacer() Text(pubDate(article.pubDate)) .font(.caption) .lineLimit(1) .foregroundColor(.secondary) } } }) }).onAppear { iconImage = thumbnail(from: article.feedIconPath) } } func thumbnail(from path: String?) -> Image? { guard let imagePath = path else { return Image(uiImage: UIImage(systemName: "globe")!) } let url = URL(fileURLWithPath: imagePath) guard let data = try? Data(contentsOf: url), let uiImage = UIImage(data: data) else { return Image(uiImage: UIImage(systemName: "globe")!) } return Image(uiImage: uiImage) } func pubDate(_ dateString: String) -> String { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z" guard let date = dateFormatter.date(from: dateString) else { return "" } let displayFormatter = DateFormatter() displayFormatter.dateStyle = .medium displayFormatter.timeStyle = .none return displayFormatter.string(from: date) } }