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

@ -32,7 +32,6 @@ struct GenerationContentView: View {
@ViewBuilder
private var generationView: some View {
ScrollView {
VStack(alignment: .leading) {
Text("Website Generation")
.font(.largeTitle)
@ -42,32 +41,75 @@ struct GenerationContentView: View {
.padding(.bottom, 30)
HStack {
Button(action: generateFeed) {
Button(action: generateFullWebsite) {
Text("Generate")
}
.disabled(isGeneratingWebsite)
Text(generatorText)
Spacer()
if isGeneratingWebsite {
ProgressView()
.progressViewStyle(.circular)
.frame(height: 25)
}
Button(action: updateGeneratedImages) {
Text("Update images")
}
.disabled(isGeneratingWebsite)
Text(content.generationStatus)
.font(.subheadline)
.padding()
HStack(spacing: 8) {
Text("\(content.results.imagesToGenerate.count) images")
Text("\(content.results.externalLinks.count) external links")
Text("\(content.results.resultCount) items processed")
Text("\(content.results.requiredFiles.count) files")
}
List {
Section("Inaccessible files") {
ForEach(content.results.inaccessibleFiles.sorted()) { file in
Text(file.id)
}
}
Section("Unparsable files") {
ForEach(content.results.unparsableFiles.sorted()) { file in
Text(file.id)
}
}
Section("Missing files") {
ForEach(content.results.missingFiles.sorted(), id: \.self) { file in
Text(file)
}
}
Section("Missing tags") {
ForEach(content.results.missingTags.sorted(), id: \.self) { tag in
Text(tag)
}
}
Section("Missing pages") {
ForEach(content.results.missingPages.sorted(), id: \.self) { page in
Text(page)
}
}
Section("Invalid commands") {
ForEach(content.results.invalidCommands.sorted(), id: \.self) { markdown in
Text(markdown)
}
}
Section("Warnings") {
ForEach(content.results.warnings.sorted(), id: \.self) { warning in
Text(warning)
}
}
Section("Unsaved output files") {
ForEach(content.results.unsavedOutputFiles.sorted(), id: \.self) { file in
Text(file)
}
}
Text(generatorText)
Spacer()
}
}.padding()
}
}
private func updateGeneratedImages() {
content.recalculateGeneratedImages()
}
private func generateFeed() {
private func generateFullWebsite() {
DispatchQueue.main.async {
_ = content.generateFeed()
content.generateWebsiteInAllLanguages()
}
#warning("Update feed generation")
/*

View File

@ -5,9 +5,9 @@ struct PageIssue {
let language: ContentLanguage
let message: PageContentAnomaly
let message: GenerationAnomaly
init(page: Page, language: ContentLanguage, message: PageContentAnomaly) {
init(page: Page, language: ContentLanguage, message: GenerationAnomaly) {
self.page = page
self.language = language
self.message = message

View File

@ -50,24 +50,23 @@ final class PageIssueChecker: ObservableObject {
}
private func analyze(page: Page, in language: ContentLanguage) {
let parser = PageContentParser(content: page.content, language: language)
let results = page.content.results.makeResults(for: page, in: language)
let parser = PageContentParser(content: page.content, language: language, results: results)
let hasPreviousIssues = issues.contains { $0.page == page && $0.language == language }
let pageIssues: [PageIssue]
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)
}
pageIssues = []
} else {
let message = PageContentAnomaly.failedToLoadContent
let message = GenerationAnomaly.failedToLoadContent
let error = PageIssue(page: page, language: language, message: message)
pageIssues = [error]
}
guard hasPreviousIssues || !pageIssues.isEmpty else {
return
}
update(issues: pageIssues, for: page, in: parser.language)
update(issues: pageIssues, for: page, in: language)
}
private func update(issues: [PageIssue], for page: Page, in language: ContentLanguage) {

View File

@ -231,7 +231,8 @@ struct PageIssueView: View {
english: .init(content: content,
urlString: pageId,
title: pageId),
tags: [])
tags: [],
requiredFiles: [])
content.pages.insert(page, at: 0)
retryPageCheck()