2024-12-16 21:01:38 +01:00

84 lines
1.7 KiB
Swift

import Foundation
import SwiftUI
import Combine
final class Content: ObservableObject {
let storage = Storage()
@Published
var storageIsInitialized = false
@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: [ItemId : PageGenerationResults] = [:]
@Published
var isGeneratingWebsite = 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
initialize()
}
init() {
self.settings = .mock
self.posts = []
self.pages = []
self.tags = []
self.files = []
self.tagOverview = nil
initialize()
}
private func initialize() {
guard storage.check(contentPath: settings.paths.contentDirectoryPath) == .nominal else {
storageIsInitialized = false
return
}
storage.check(outputPath: settings.paths.outputDirectoryPath)
do {
try storage.createFolderStructure()
storageIsInitialized = true
} catch {
print("Failed to initialize storage: \(error)")
storageIsInitialized = false
}
}
var images: [FileResource] {
files.filter { $0.type.isImage }
}
}