Rework storage structs, link preview

This commit is contained in:
Christoph Hagen
2025-01-08 14:59:04 +01:00
parent b99c064d10
commit a7197b9628
75 changed files with 1365 additions and 1454 deletions

View File

@@ -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
}
}