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 } } }