Load incomplete content, show errors
This commit is contained in:
@ -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
|
||||
|
@ -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 {
|
||||
|
Reference in New Issue
Block a user