Full generation, file type cleanup

This commit is contained in:
Christoph Hagen
2024-12-25 18:06:05 +01:00
parent 41887a1401
commit 1e4682dad1
56 changed files with 1577 additions and 1103 deletions

View File

@ -4,6 +4,9 @@ import HighlightedTextEditor
struct LocalizedPageContentView: View {
@EnvironmentObject
var content: Content
let pageId: String
let language: ContentLanguage
@ -11,9 +14,6 @@ struct LocalizedPageContentView: View {
@ObservedObject
var page: LocalizedPage
@State
private var isGeneratingWebsite = false
@State
private var pageContent: String = ""
@ -21,7 +21,7 @@ struct LocalizedPageContentView: View {
private var pageContentUsedForGeneration: String = ""
@State
private var generationResults = PageGenerationResults()
private var generationResults: PageGenerationResults?
@State
private var didChangeContent = false
@ -47,10 +47,16 @@ struct LocalizedPageContentView: View {
}
Button(action: checkContent) {
Text("Check")
}.disabled(content.isGeneratingWebsite)
if content.isGeneratingWebsite {
ProgressView()
.frame(height: 15)
}
Spacer()
}
PageContentResultsView(results: generationResults)
if let generationResults {
PageContentResultsView(results: generationResults)
}
HighlightedTextEditor(
text: $pageContent,
highlightRules: .markdown)
@ -65,9 +71,19 @@ struct LocalizedPageContentView: View {
private func loadContent() {
let language = language
guard page.content.storage.hasPageContent(for: pageId, language: language) else {
pageContent = "New file"
DispatchQueue.main.async {
didChangeContent = false
}
return
}
guard let content = page.content.storage.pageContent(for: pageId, language: language) else {
print("Failed to load page content")
pageContent = "Failed to load"
DispatchQueue.main.async {
didChangeContent = false
}
return
}
guard content != "" else {
@ -105,15 +121,14 @@ struct LocalizedPageContentView: View {
guard content != pageContentUsedForGeneration else {
return
}
isGeneratingWebsite = true
DispatchQueue.global(qos: .background).async {
let generator = PageContentParser(content: page.content, language: language)
_ = generator.generatePage(from: content)
DispatchQueue.main.async {
self.generationResults = generator.results
isGeneratingWebsite = false
}
guard let page = self.content.page(pageId) else {
return
}
guard !self.content.isGeneratingWebsite else {
return
}
self.content.check(content: content, of: page, for: language) {
self.generationResults = $0
}
}
}