2025-01-04 08:44:26 +01:00

116 lines
2.4 KiB
Swift

import Foundation
import SwiftUI
import Combine
final class Content: ObservableObject {
@ObservedObject
var storage: Storage
@Published
var settings: Settings
@Published
var posts: [Post]
@Published
var pages: [Page]
@Published
var tags: [Tag]
@Published
var files: [FileResource]
@Published
var tagOverview: TagOverviewPage?
@Published
var results: GenerationResults
@Published
var generationStatus: String = "Ready to generate"
@Published
private(set) var isGeneratingWebsite = false
@Published
private(set) var shouldGenerateWebsite = false
init(settings: Settings,
posts: [Post],
pages: [Page],
tags: [Tag],
files: [FileResource],
tagOverview: TagOverviewPage?) {
self.settings = settings
self.posts = posts
self.pages = pages
self.tags = tags
self.files = files
self.tagOverview = tagOverview
self.results = .init()
let storage = Storage()
self.storage = storage
}
init() {
let settings = Settings.default
self.settings = settings
self.posts = []
self.pages = []
self.tags = []
self.files = []
self.tagOverview = nil
self.results = .init()
let storage = Storage()
self.storage = storage
}
private func clear() {
self.settings = .default
self.posts = []
self.pages = []
self.tags = []
self.files = []
self.tagOverview = nil
self.results = .init()
}
var images: [FileResource] {
files.filter { $0.type.isImage }
}
func set(isGenerating: Bool) {
self.isGeneratingWebsite = isGenerating
}
func set(shouldGenerate: Bool) {
self.shouldGenerateWebsite = shouldGenerate
}
func add(_ file: FileResource) {
// TODO: Insert at correct index?
files.insert(file, at: 0)
}
func add(_ page: Page) {
// TODO: Insert at correct index?
pages.insert(page, at: 0)
}
func update(contentPath: URL) {
guard storage.save(contentPath: contentPath) else {
return
}
clear()
do {
try loadFromDisk()
} catch {
print("Failed to reload content: \(error)")
}
}
}