Load incomplete content, show errors

This commit is contained in:
Christoph Hagen
2025-02-05 20:56:02 +01:00
parent 2b88584ba1
commit d556a51228
9 changed files with 142 additions and 118 deletions

View File

@ -16,9 +16,13 @@ extension Content {
}
func saveIfNeeded() {
guard saveState != .isSaved else {
switch saveState {
case .isSaved, .savingPausedDueToLoadErrors, .storageNotInitialized:
return
default:
break
}
if Date.now.timeIntervalSince(lastModification) < 5 {
// Additional modification made
// Wait for next scheduled invocation of saveIfNeeded()
@ -43,7 +47,6 @@ extension Content {
}
private func saveToDisk() -> Bool {
guard didLoadContent else { return false }
guard storage.contentScope != nil else {
print("Storage not initialized, not saving content")
return false

View File

@ -4,9 +4,6 @@ import Combine
final class Content: ObservableObject {
@Published
var didLoadContent = false
@ObservedObject
var storage: Storage
@ -132,31 +129,37 @@ final class Content: ObservableObject {
func loadFromDisk(callback: @escaping () -> ()) {
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
self.storageErrors.append(contentsOf: result.errors)
callback()
}
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()
self.generateMissingVideoThumbnails()
}
self.loadInBackground(callback: callback)
}
}
private func loadInBackground(callback: @escaping () -> ()) {
let loader = ModelLoader(content: self, storage: self.storage)
let result = loader.load()
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.storageErrors.append(contentsOf: result.errors)
if !result.errors.isEmpty {
self.saveState = .savingPausedDueToLoadErrors
} else {
self.saveState = .isSaved
}
callback()
self.generateMissingVideoThumbnails()
}
}
func resumeSavingAfterLoadingErrors() {
saveState = .needsSave
saveIfNeeded()
}
func generateMissingVideoThumbnails() {
Task {
for file in self.files {