import Foundation import SwiftUI final class LocalizedPost: ObservableObject { unowned let content: Content @Published var title: String? @Published var text: String @Published var lastModified: Date? @Published var images: [FileResource] /// The text to show for the link to the `linkedPage` @Published var pageLinkText: String? @Published var linkPreviewImage: FileResource? @Published var linkPreviewTitle: String? @Published var linkPreviewDescription: String? init(content: Content, title: String? = nil, text: String, lastModified: Date? = nil, images: [FileResource] = [], pageLinkText: String? = nil, linkPreviewImage: FileResource? = nil, linkPreviewTitle: String? = nil, linkPreviewDescription: String? = nil) { self.content = content self.title = title self.text = text self.lastModified = lastModified self.images = images self.pageLinkText = pageLinkText self.linkPreviewImage = linkPreviewImage self.linkPreviewTitle = linkPreviewTitle self.linkPreviewDescription = linkPreviewDescription } init(content: Content, file: LocalizedPostFile, images: [String : FileResource]) { self.content = content self.title = file.title self.text = file.content self.lastModified = file.lastModifiedDate self.images = file.images.compactMap { images[$0] } self.pageLinkText = file.pageLinkText self.linkPreviewImage = file.linkPreviewImage.map { images[$0] } self.linkPreviewTitle = file.linkPreviewTitle self.linkPreviewDescription = file.linkPreviewDescription } var postFile: LocalizedPostFile { .init(images: images.map { $0.id }, title: title, content: text, lastModifiedDate: lastModified, pageLinkText: pageLinkText, linkPreviewImage: linkPreviewImage?.id, linkPreviewTitle: linkPreviewTitle, linkPreviewDescription: linkPreviewDescription) } func contains(_ string: String) -> Bool { if let title, title.contains(string) { return true } return text.contains(string) } func remove(_ file: FileResource) { if images.contains(file) { images.remove(file) } remove(linkPreviewImage: file) } } extension LocalizedPost: LinkPreviewItem { }