95 lines
2.6 KiB
Swift
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()
|
|
}
|