Improve storage

This commit is contained in:
Christoph Hagen
2024-12-19 16:25:05 +01:00
parent 9c828ff80a
commit 41887a1401
30 changed files with 926 additions and 831 deletions

View File

@ -54,14 +54,13 @@ final class PageIssueChecker: ObservableObject {
let hasPreviousIssues = issues.contains { $0.page == page && $0.language == language }
let pageIssues: [PageIssue]
do {
let rawPageContent = try page.content.storage.pageContent(for: page.id, language: language)
if let rawPageContent = page.content.storage.pageContent(for: page.id, language: language) {
_ = parser.generatePage(from: rawPageContent)
pageIssues = parser.results.issues.map {
PageIssue(page: page, language: language, message: $0)
}
} catch {
let message = PageContentAnomaly.failedToLoadContent(error)
} else {
let message = PageContentAnomaly.failedToLoadContent
let error = PageIssue(page: page, language: language, message: message)
pageIssues = [error]
}

View File

@ -90,6 +90,8 @@ struct PageIssueView: View {
return [.init(name: "Retry", action: retryPageCheck)]
case .failedToLoadContent:
return [.init(name: "Retry", action: retryPageCheck)]
case .failedToParseContent:
return [.init(name: "Retry", action: retryPageCheck)]
case .missingFile(let missing, _):
return [
.init(name: "Select file", action: { selectFile(missingFile: missing) }),
@ -284,23 +286,22 @@ struct PageIssueView: View {
}
private func replace(_ oldString: String, with newString: String, in page: Page, language: ContentLanguage) {
do {
let pageContent = try content.storage.pageContent(for: page.id, language: language)
.replacingOccurrences(of: oldString, with: newString)
try content.storage.save(pageContent: pageContent, for: page.id, language: language)
guard let pageContent = content.storage.pageContent(for: page.id, language: language) else {
print("Failed to replace in page \(page.id) (\(language)), no content")
return
}
let modified = pageContent.replacingOccurrences(of: oldString, with: newString)
guard content.storage.save(pageContent: modified, for: page.id, language: language) else {
print("Replaced \(oldString) with \(newString) in page \(page.id) (\(language))")
} catch {
print("Failed to replace in page \(page.id) (\(language)): \(error)")
return
}
}
private func findOccurrences(of searchString: String, in page: Page, language: ContentLanguage) -> [String] {
let parts: [String]
do {
parts = try content.storage.pageContent(for: page.id, language: language)
.components(separatedBy: searchString)
} catch {
print("Failed to get page content to find occurrences: \(error.localizedDescription)")
guard let parts = content.storage.pageContent(for: page.id, language: language)?
.components(separatedBy: searchString) else {
print("Failed to get page content to find occurrences, no content")
return []
}

View File

@ -51,6 +51,9 @@ struct GenerationContentView: View {
.progressViewStyle(.circular)
.frame(height: 25)
}
Button(action: updateGeneratedImages) {
Text("Update images")
}
Text(generatorText)
Spacer()
}
@ -58,7 +61,16 @@ struct GenerationContentView: View {
}
}
private func updateGeneratedImages() {
content.recalculateGeneratedImages()
}
private func generateFeed() {
DispatchQueue.main.async {
_ = content.generateFeed()
}
#warning("Update feed generation")
/*
guard let url = content.storage.outputPath else {
print("Invalid output path")
return
@ -83,6 +95,7 @@ struct GenerationContentView: View {
self.generatorText = "Generation complete"
}
}
*/
}
}

View File

@ -17,16 +17,14 @@ struct PathSettingsView: View {
FolderOnDiskPropertyView(
title: "Content Folder",
folder: $content.storage.contentPath,
isStale: $content.storage.contentPathUrlIsStale,
folder: $content.storage.contentScope,
footer: "The folder where the raw content of the website is stored") { url in
content.update(contentPath: url)
}
FolderOnDiskPropertyView(
title: "Output Folder",
folder: $content.storage.outputPath,
isStale: $content.storage.outputPathUrlIsStale,
folder: $content.storage.outputScope,
footer: "The folder where the generated website is stored") { url in
content.storage.save(outputPath: url)
}