Save automatically, improve mocks
This commit is contained in:
@@ -11,7 +11,7 @@ final class Content: ObservableObject {
|
||||
var storage: Storage
|
||||
|
||||
@Published
|
||||
var settings: Settings
|
||||
var settings: Settings!
|
||||
|
||||
@Published
|
||||
var posts: [Post]
|
||||
@@ -31,6 +31,9 @@ final class Content: ObservableObject {
|
||||
@Published
|
||||
var results: GenerationResults
|
||||
|
||||
@Published
|
||||
var storageErrors: [StorageError] = []
|
||||
|
||||
@Published
|
||||
var generationStatus: String = "Ready to generate"
|
||||
|
||||
@@ -40,28 +43,12 @@ final class Content: ObservableObject {
|
||||
@Published
|
||||
private(set) var shouldGenerateWebsite = false
|
||||
|
||||
@Published
|
||||
private(set) var saveState: SaveState = .isSaved
|
||||
|
||||
let imageGenerator: ImageGenerator
|
||||
|
||||
init(settings: Settings,
|
||||
posts: [Post],
|
||||
pages: [Page],
|
||||
tags: [Tag],
|
||||
files: [FileResource],
|
||||
tagOverview: Tag?) {
|
||||
self.settings = settings
|
||||
self.posts = posts
|
||||
self.pages = pages
|
||||
self.tags = tags
|
||||
self.files = files
|
||||
self.tagOverview = tagOverview
|
||||
self.results = .init()
|
||||
|
||||
let storage = Storage()
|
||||
self.storage = storage
|
||||
self.imageGenerator = ImageGenerator(
|
||||
storage: storage,
|
||||
settings: settings)
|
||||
}
|
||||
var errorCallback: ((StorageError) -> Void)?
|
||||
|
||||
init() {
|
||||
let settings = Settings.default
|
||||
@@ -78,6 +65,10 @@ final class Content: ObservableObject {
|
||||
self.imageGenerator = ImageGenerator(
|
||||
storage: storage,
|
||||
settings: settings)
|
||||
storage.errorNotification = { [weak self] error in
|
||||
self?.storageErrors.append(error)
|
||||
}
|
||||
settings.content = self
|
||||
}
|
||||
|
||||
private func clear() {
|
||||
@@ -112,7 +103,7 @@ final class Content: ObservableObject {
|
||||
pages.insert(page, at: 0)
|
||||
}
|
||||
|
||||
func update(contentPath: URL, callback: @escaping ([String]) -> ()) {
|
||||
func update(contentPath: URL, callback: @escaping () -> ()) {
|
||||
guard storage.save(contentPath: contentPath) else {
|
||||
return
|
||||
}
|
||||
@@ -139,19 +130,15 @@ final class Content: ObservableObject {
|
||||
files.first { $0.absoluteUrl == withOutputPath }
|
||||
}
|
||||
|
||||
private let errorPrinter = ErrorPrinter()
|
||||
|
||||
func loadFromDisk(callback: @escaping (_ errors: [String]) -> ()) {
|
||||
defer {
|
||||
storage.contentScope?.delegate = errorPrinter
|
||||
}
|
||||
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
|
||||
callback(result.errors.sorted())
|
||||
self.storageErrors.append(contentsOf: result.errors)
|
||||
callback()
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -164,7 +151,7 @@ final class Content: ObservableObject {
|
||||
self.settings = result.settings
|
||||
self.tagOverview = result.tagOverview
|
||||
self.didLoadContent = true
|
||||
callback([])
|
||||
callback()
|
||||
self.generateMissingVideoThumbnails()
|
||||
}
|
||||
}
|
||||
@@ -183,4 +170,22 @@ final class Content: ObservableObject {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Saving
|
||||
|
||||
private(set) var lastSave: Date = .now
|
||||
|
||||
private(set) var lastModification: Date = .now
|
||||
|
||||
func update(saveState: SaveState) {
|
||||
self.saveState = saveState
|
||||
}
|
||||
|
||||
func setModificationTimestamp() {
|
||||
self.lastModification = .now
|
||||
}
|
||||
|
||||
func setLastSaveTimestamp() {
|
||||
self.lastSave = .now
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user