Rework storage structs, link preview
This commit is contained in:
@@ -22,13 +22,7 @@ final class LocalizedPost: ObservableObject {
|
||||
var pageLinkText: String?
|
||||
|
||||
@Published
|
||||
var linkPreviewImage: FileResource?
|
||||
|
||||
@Published
|
||||
var linkPreviewTitle: String?
|
||||
|
||||
@Published
|
||||
var linkPreviewDescription: String?
|
||||
var linkPreview: LinkPreview
|
||||
|
||||
init(content: Content,
|
||||
title: String? = nil,
|
||||
@@ -36,41 +30,14 @@ final class LocalizedPost: ObservableObject {
|
||||
lastModified: Date? = nil,
|
||||
images: [FileResource] = [],
|
||||
pageLinkText: String? = nil,
|
||||
linkPreviewImage: FileResource? = nil,
|
||||
linkPreviewTitle: String? = nil,
|
||||
linkPreviewDescription: String? = nil) {
|
||||
linkPreview: LinkPreview = .init()) {
|
||||
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)
|
||||
self.linkPreview = linkPreview
|
||||
}
|
||||
|
||||
func contains(_ string: String) -> Bool {
|
||||
@@ -84,10 +51,41 @@ final class LocalizedPost: ObservableObject {
|
||||
if images.contains(file) {
|
||||
images.remove(file)
|
||||
}
|
||||
remove(linkPreviewImage: file)
|
||||
linkPreview.remove(file)
|
||||
}
|
||||
}
|
||||
|
||||
extension LocalizedPost: LinkPreviewItem {
|
||||
// MARK: Storage
|
||||
|
||||
extension LocalizedPost {
|
||||
|
||||
convenience init(context: LoadingContext, data: Data) {
|
||||
self.init(
|
||||
content: context.content,
|
||||
title: data.title,
|
||||
text: data.text,
|
||||
lastModified: data.lastModifiedDate,
|
||||
images: data.images.compactMap(context.image),
|
||||
pageLinkText: data.pageLinkText,
|
||||
linkPreview: .init(context: context, data: data.linkPreview))
|
||||
}
|
||||
|
||||
var data: Data {
|
||||
.init(images: images.map { $0.id },
|
||||
title: title,
|
||||
text: text,
|
||||
lastModifiedDate: lastModified,
|
||||
pageLinkText: pageLinkText,
|
||||
linkPreview: linkPreview.data)
|
||||
}
|
||||
|
||||
/// The structure to store the metadata of a localized post
|
||||
struct Data: Codable {
|
||||
let images: [String]
|
||||
let title: String?
|
||||
let text: String
|
||||
let lastModifiedDate: Date?
|
||||
let pageLinkText: String?
|
||||
let linkPreview: LinkPreview.Data
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user