Import old content, load from disk

This commit is contained in:
Christoph Hagen
2024-11-18 20:19:20 +01:00
parent 0989f06d87
commit 943d8d962b
24 changed files with 1326 additions and 210 deletions

View File

@ -1,12 +1,15 @@
import SwiftUI
import Foundation
final class Post: ObservableObject {
let id: Int
let id: String
@Published
var isDraft: Bool
@Published
var createdDate: Date
@Published
var startDate: Date
@ -19,33 +22,42 @@ final class Post: ObservableObject {
@Published
var tags: [Tag]
let title: LocalizedText
@Published
var german: LocalizedPost
let text: LocalizedText
var images: [ImageResource]
@Published
var english: LocalizedPost
/// The page linked to by this post
@Published
var linkedPage: Page?
init(id: Int,
isDraft: Bool = false,
init(id: String,
isDraft: Bool,
createdDate: Date,
startDate: Date,
endDate: Date? = nil,
title: LocalizedText,
text: LocalizedText,
endDate: Date?,
tags: [Tag],
images: [ImageResource]) {
german: LocalizedPost,
english: LocalizedPost,
linkedPage: Page? = nil) {
self.id = id
self.isDraft = isDraft
self.createdDate = createdDate
self.startDate = startDate
self.hasEndDate = endDate != nil
self.endDate = endDate ?? startDate
self.title = title
self.text = text
self.tags = tags
self.images = images
self.german = german
self.english = english
self.linkedPage = linkedPage
}
func localized(in language: ContentLanguage) -> LocalizedPost {
switch language {
case .english: return english
case .german: return german
}
}
}
@ -142,8 +154,7 @@ extension Post {
}
private func paragraphs(in language: ContentLanguage) -> [String] {
text
.getText(for: language)
localized(in: language).content
.components(separatedBy: "\n")
.map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }
.filter { $0 != "" }
@ -154,17 +165,16 @@ extension Post {
}
func feedEntry(for language: ContentLanguage) -> FeedEntryData {
.init(
let post = localized(in: language)
return .init(
entryId: "\(id)",
title: title.getText(for: language),
title: post.title,
textAboveTitle: dateText(in: language),
link: linkToPageInFeed(for: language),
tags: tags.map { $0.data(in: language) },
text: paragraphs(in: language),
images: images.map { $0.feedEntryImage(for: language) })
}
var displayImages: [Image] {
images.map { $0.imageToDisplay }
images: post.images.map {
$0.feedEntryImage(for: language)
})
}
}