ChWebsiteApp/CHDataManagement/Views/Settings/GenerationContentView.swift
2024-12-13 11:26:34 +01:00

95 lines
2.6 KiB
Swift

import SwiftUI
struct GenerationContentView: View {
@Environment(\.language)
private var language
@EnvironmentObject
private var content: Content
@Binding
private var selectedSection: SettingsSection
init(selected: Binding<SettingsSection>) {
self._selectedSection = selected
}
@State
private var isGeneratingWebsite = false
@State
private var generatorText: String = ""
var body: some View {
switch selectedSection {
case .folders, .navigationBar, .postFeed:
generationView
case .pages:
PageSettingsContentView()
}
}
@ViewBuilder
private var generationView: some View {
ScrollView {
VStack(alignment: .leading) {
Text("Website Generation")
.font(.largeTitle)
.bold()
Text("Regenerate the website and monitor the output")
.foregroundStyle(.secondary)
.padding(.bottom, 30)
HStack {
Button(action: generateFeed) {
Text("Generate")
}
.disabled(isGeneratingWebsite)
if isGeneratingWebsite {
ProgressView()
.progressViewStyle(.circular)
.frame(height: 25)
}
Text(generatorText)
Spacer()
}
}.padding()
}
}
private func generateFeed() {
guard content.settings.paths.outputDirectoryPath != "" else {
print("Invalid output path")
return
}
let url = content.settings.outputDirectory
guard FileManager.default.fileExists(atPath: url.path) else {
print("Missing output folder")
return
}
isGeneratingWebsite = true
DispatchQueue.global(qos: .userInitiated).async {
let generator = LocalizedWebsiteGenerator(
content: content,
language: language)
_ = generator.generateWebsite { text in
DispatchQueue.main.async {
self.generatorText = text
}
}
DispatchQueue.main.async {
isGeneratingWebsite = false
self.generatorText = "Generation complete"
}
}
}
}
#Preview {
GenerationContentView(selected: .constant(.folders))
.environmentObject(Content.mock)
.padding()
}