External files, improve page generation
This commit is contained in:
@ -1,4 +1,5 @@
|
||||
import SwiftUI
|
||||
import SFSafeSymbols
|
||||
import HighlightedTextEditor
|
||||
|
||||
struct LocalizedPageContentView: View {
|
||||
@ -11,17 +12,21 @@ struct LocalizedPageContentView: View {
|
||||
@Environment(\.language)
|
||||
private var language
|
||||
|
||||
@EnvironmentObject
|
||||
private var content: Content
|
||||
|
||||
@State
|
||||
private var isGeneratingWebsite = false
|
||||
|
||||
@State
|
||||
private var loadedPageContentLanguage: ContentLanguage?
|
||||
|
||||
@State
|
||||
private var pageContent: String = ""
|
||||
|
||||
@State
|
||||
private var didLoadContent = false
|
||||
private var pageContentUsedForGeneration: String = ""
|
||||
|
||||
@State
|
||||
private var generationResults = PageGenerationResults()
|
||||
|
||||
|
||||
init(pageId: String, page: LocalizedPage) {
|
||||
self.pageId = pageId
|
||||
@ -41,8 +46,12 @@ struct LocalizedPageContentView: View {
|
||||
Button(action: saveContent) {
|
||||
Text("Save")
|
||||
}
|
||||
Button(action: checkContent) {
|
||||
Text("Check")
|
||||
}
|
||||
Spacer()
|
||||
}
|
||||
PageContentResultsView(results: generationResults)
|
||||
HighlightedTextEditor(
|
||||
text: $pageContent,
|
||||
highlightRules: .markdown)
|
||||
@ -53,32 +62,50 @@ struct LocalizedPageContentView: View {
|
||||
}
|
||||
|
||||
private func loadContent() {
|
||||
let language = language
|
||||
do {
|
||||
let content = try content.storage.pageContent(for: pageId, language: language)
|
||||
let content = try page.content.storage.pageContent(for: pageId, language: language)
|
||||
|
||||
guard content != "" else {
|
||||
pageContent = "New file"
|
||||
didLoadContent = false
|
||||
loadedPageContentLanguage = nil
|
||||
return
|
||||
}
|
||||
pageContent = content
|
||||
didLoadContent = true
|
||||
|
||||
loadedPageContentLanguage = language
|
||||
checkContent()
|
||||
} catch {
|
||||
print("Failed to load page content: \(error)")
|
||||
pageContent = "Failed to load"
|
||||
loadedPageContentLanguage = nil
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private func saveContent() {
|
||||
guard didLoadContent else {
|
||||
guard let loadedPageContentLanguage else {
|
||||
return
|
||||
}
|
||||
do {
|
||||
try content.storage.save(pageContent: pageContent, for: pageId, language: language)
|
||||
try page.content.storage.save(pageContent: pageContent, for: pageId, language: loadedPageContentLanguage)
|
||||
} catch {
|
||||
print("Failed to save content: \(error)")
|
||||
}
|
||||
}
|
||||
|
||||
private func checkContent() {
|
||||
let content = self.pageContent
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user