107 lines
3.8 KiB
Swift
107 lines
3.8 KiB
Swift
import SwiftUI
|
|
|
|
struct PathSettingsView: View {
|
|
|
|
@Environment(\.language)
|
|
private var language
|
|
|
|
@EnvironmentObject
|
|
private var content: Content
|
|
|
|
@State
|
|
private var showLoadErrorSheet: Bool = false
|
|
|
|
@State
|
|
private var loadErrors: [String] = []
|
|
|
|
var body: some View {
|
|
ScrollView {
|
|
VStack(alignment: .leading) {
|
|
DetailTitle(
|
|
title: "Folder Settings",
|
|
text: "Select the folders for the app to work.")
|
|
|
|
FolderOnDiskPropertyView(
|
|
title: "Content Folder",
|
|
folder: $content.storage.contentScope,
|
|
footer: "The folder where the raw content of the website is stored") { url in
|
|
content.update(contentPath: url, callback: showLoadErrors)
|
|
}
|
|
|
|
FolderOnDiskPropertyView(
|
|
title: "Output Folder",
|
|
folder: $content.storage.outputScope,
|
|
footer: "The folder where the generated website is stored") { url in
|
|
content.storage.save(outputPath: url)
|
|
}
|
|
|
|
StringPropertyView(
|
|
title: "Pages output folder",
|
|
text: $content.settings.paths.pagesOutputFolderPath,
|
|
footer: "The path in the output folder where the generated pages are stored")
|
|
|
|
StringPropertyView(
|
|
title: "Tags output folder",
|
|
text: $content.settings.paths.tagsOutputFolderPath,
|
|
footer: "The path in the output folder where the generated tag pages are stored")
|
|
|
|
StringPropertyView(
|
|
title: "Files output folder",
|
|
text: $content.settings.paths.filesOutputFolderPath,
|
|
footer: "The path in the output folder where the copied files are stored")
|
|
|
|
StringPropertyView(
|
|
title: "Images output folder",
|
|
text: $content.settings.paths.imagesOutputFolderPath,
|
|
footer: "The path in the output folder where the generated images are stored")
|
|
|
|
StringPropertyView(
|
|
title: "Videos output folder",
|
|
text: $content.settings.paths.videosOutputFolderPath,
|
|
footer: "The path in the output folder where the generated videos are stored")
|
|
|
|
StringPropertyView(
|
|
title: "Audio output folder",
|
|
text: $content.settings.paths.audioOutputFolderPath,
|
|
footer: "The path in the output folder where the audio files are stored")
|
|
|
|
StringPropertyView(
|
|
title: "Assets output folder",
|
|
text: $content.settings.paths.assetsOutputFolderPath,
|
|
footer: "The path in the output folder where assets are stored")
|
|
}
|
|
.padding()
|
|
.sheet(isPresented: $showLoadErrorSheet) {
|
|
VStack {
|
|
Text("Failed to load database")
|
|
.font(.headline)
|
|
List(loadErrors, id: \.self) { error in
|
|
HStack {
|
|
Text(error)
|
|
Spacer()
|
|
}
|
|
}
|
|
.frame(minHeight: 200)
|
|
Button("Dismiss", action: { showLoadErrorSheet = false })
|
|
.padding()
|
|
}
|
|
.padding()
|
|
}
|
|
}
|
|
}
|
|
|
|
private func showLoadErrors(errors: [String]) {
|
|
guard !errors.isEmpty else {
|
|
return
|
|
}
|
|
loadErrors = errors
|
|
showLoadErrorSheet = true
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
PathSettingsView()
|
|
.environmentObject(Content.mock)
|
|
.padding()
|
|
}
|