Rework storage structs, link preview

This commit is contained in:
Christoph Hagen
2025-01-08 14:59:04 +01:00
parent b99c064d10
commit a7197b9628
75 changed files with 1365 additions and 1454 deletions

View File

@@ -4,6 +4,9 @@ import Combine
final class Content: ObservableObject {
@Published
var didLoadContent = false
@ObservedObject
var storage: Storage
@@ -23,7 +26,7 @@ final class Content: ObservableObject {
var files: [FileResource]
@Published
var tagOverview: TagOverviewPage?
var tagOverview: Tag?
@Published
var results: GenerationResults
@@ -47,7 +50,7 @@ final class Content: ObservableObject {
pages: [Page],
tags: [Tag],
files: [FileResource],
tagOverview: TagOverviewPage?) {
tagOverview: Tag?) {
self.settings = settings
self.posts = posts
self.pages = pages
@@ -112,16 +115,11 @@ final class Content: ObservableObject {
pages.insert(page, at: 0)
}
func update(contentPath: URL) {
func update(contentPath: URL, callback: @escaping ([String]) -> ()) {
guard storage.save(contentPath: contentPath) else {
return
}
clear()
do {
try loadFromDisk()
} catch {
print("Failed to reload content: \(error)")
}
loadFromDisk(callback: callback)
}
func remove(_ file: FileResource) {
@@ -146,4 +144,29 @@ final class Content: ObservableObject {
func file(withOutputPath: String) -> FileResource? {
files.first { $0.absoluteUrl == withOutputPath }
}
func loadFromDisk(callback: @escaping (_ errors: [String]) -> ()) {
DispatchQueue.global().async {
let loader = ModelLoader(content: self, storage: self.storage)
let result = loader.load()
guard result.errors.isEmpty else {
DispatchQueue.main.async {
self.didLoadContent = false
callback(result.errors.sorted())
}
return
}
DispatchQueue.main.async {
self.files = result.files
self.posts = result.posts
self.pages = result.pages
self.tags = result.tags
self.settings = result.settings
self.tagOverview = result.tagOverview
self.didLoadContent = true
callback([])
}
}
}
}