Rework storage structs, link preview
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import Foundation
|
||||
|
||||
final class Page: Item {
|
||||
final class Page: Item, DateItem, LocalizedItem {
|
||||
|
||||
override var itemType: ItemType { .page }
|
||||
|
||||
/**
|
||||
The external link this page points to.
|
||||
@@ -38,9 +40,7 @@ final class Page: Item {
|
||||
@Published
|
||||
var tags: [Tag]
|
||||
|
||||
/**
|
||||
Additional files to copy, because the page content references them
|
||||
*/
|
||||
/// Additional files to copy, because the page content references them
|
||||
@Published
|
||||
var requiredFiles: [FileResource]
|
||||
|
||||
@@ -141,7 +141,7 @@ final class Page: Item {
|
||||
content.settings.paths.pagesOutputFolderPath + "/" + localized(in: language).urlString
|
||||
}
|
||||
|
||||
override var itemType: ItemType {
|
||||
override var itemReference: ItemReference {
|
||||
.page(self)
|
||||
}
|
||||
|
||||
@@ -161,15 +161,57 @@ final class Page: Item {
|
||||
if requiredFiles.contains(file) {
|
||||
requiredFiles.remove(file)
|
||||
}
|
||||
english.remove(linkPreviewImage: file)
|
||||
german.remove(linkPreviewImage: file)
|
||||
english.linkPreview.remove(file)
|
||||
german.linkPreview.remove(file)
|
||||
}
|
||||
}
|
||||
|
||||
extension Page: DateItem {
|
||||
// MARK: Storage
|
||||
|
||||
}
|
||||
extension Page {
|
||||
|
||||
extension Page: LocalizedItem {
|
||||
|
||||
convenience init(context: LoadingContext, id: String, data: Data) {
|
||||
self.init(
|
||||
content: context.content,
|
||||
id: id,
|
||||
externalLink: data.externalLink,
|
||||
isDraft: data.isDraft,
|
||||
createdDate: data.createdDate,
|
||||
hideDate: data.hideDate ?? false,
|
||||
startDate: data.startDate,
|
||||
endDate: data.endDate,
|
||||
german: .init(context: context, data: data.german),
|
||||
english: .init(context: context, data: data.english),
|
||||
tags: data.tags.compactMap(context.tag),
|
||||
requiredFiles: data.requiredFiles?.compactMap(context.file) ?? [])
|
||||
}
|
||||
|
||||
/// The structure to store the metadata of a page on disk
|
||||
struct Data: Codable {
|
||||
let isDraft: Bool
|
||||
let externalLink: String?
|
||||
let tags: [String]
|
||||
let hideDate: Bool?
|
||||
let createdDate: Date
|
||||
let startDate: Date
|
||||
let endDate: Date?
|
||||
let german: LocalizedPage.Data
|
||||
let english: LocalizedPage.Data
|
||||
let requiredFiles: [String]?
|
||||
}
|
||||
|
||||
|
||||
var data: Data {
|
||||
.init(
|
||||
isDraft: isDraft,
|
||||
externalLink: externalLink,
|
||||
tags: tags.map { $0.id },
|
||||
hideDate: hideDate ? true : nil,
|
||||
createdDate: createdDate,
|
||||
startDate: startDate,
|
||||
endDate: hasEndDate ? endDate : nil,
|
||||
german: german.data,
|
||||
english: english.data,
|
||||
requiredFiles: requiredFiles.nonEmpty?.map { $0.id }.sorted())
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user