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

@@ -12,14 +12,7 @@ final class LocalizedTag: ObservableObject {
var name: String
@Published
var linkPreviewTitle: String?
@Published
var linkPreviewDescription: String?
/// The image id of the thumbnail
@Published
var linkPreviewImage: FileResource?
var linkPreview: LinkPreview
/// The original url in the previous site layout
let originalUrl: String?
@@ -27,42 +20,51 @@ final class LocalizedTag: ObservableObject {
init(content: Content,
urlComponent: String,
name: String,
linkPreviewTitle: String? = nil,
linkPreviewDescription: String? = nil,
linkPreviewImage: FileResource? = nil,
linkPreview: LinkPreview = .init(),
originalUrl: String? = nil) {
self.content = content
self.urlComponent = urlComponent
self.name = name
self.linkPreviewTitle = linkPreviewTitle
self.linkPreviewDescription = linkPreviewDescription
self.linkPreviewImage = linkPreviewImage
self.linkPreview = linkPreview
self.originalUrl = originalUrl
}
func isValid(urlComponent: String) -> Bool {
!urlComponent.isEmpty &&
content.isValidIdForTagOrPageOrPost(urlComponent) &&
!content.containsTag(withUrlComponent: urlComponent)
}
/// The title to display when considering multiple items of this tag
var title: String {
linkPreviewTitle ?? name
linkPreview.title ?? name
}
}
extension LocalizedTag: LinkPreviewItem {
}
// MARK: Storage
extension LocalizedTag {
var tagFile: LocalizedTagFile {
convenience init(context: LoadingContext, data: Data) {
self.init(
content: context.content,
urlComponent: data.urlComponent,
name: data.name,
linkPreview: .init(context: context, data: data.linkPreview),
originalUrl: data.originalUrl)
}
struct Data: Codable {
let urlComponent: String
let name: String
let linkPreview: LinkPreview.Data
let originalUrl: String?
}
var data: Data {
.init(urlComponent: urlComponent,
name: name,
linkPreviewTitle: linkPreviewTitle,
linkPreviewDescription: linkPreviewDescription,
linkPreviewImage: linkPreviewImage?.id,
originalURL: originalUrl)
linkPreview: linkPreview.data,
originalUrl: originalUrl)
}
}