87 lines
2.3 KiB
Swift
87 lines
2.3 KiB
Swift
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)
|
|
}
|
|
}
|
|
|
|
extension LocalizedPost: LinkPreviewItem {
|
|
|
|
}
|