Rework storage structs, link preview
This commit is contained in:
@@ -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([])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user