2025-01-06 01:17:06 +01:00

86 lines
2.2 KiB
Swift

import Foundation
final class Settings: ObservableObject {
@Published
var paths: PathSettings
/// The items to show in the navigation bar
@Published
var navigation: NavigationSettings
@Published
var posts: PostSettings
@Published
var pages: PageSettings
@Published
var audioPlayer: AudioPlayerSettings
@Published
var german: LocalizedPostSettings
@Published
var english: LocalizedPostSettings
init(paths: PathSettings,
navigation: NavigationSettings,
posts: PostSettings,
pages: PageSettings,
audioPlayer: AudioPlayerSettings,
german: LocalizedPostSettings,
english: LocalizedPostSettings) {
self.paths = paths
self.navigation = navigation
self.posts = posts
self.pages = pages
self.audioPlayer = audioPlayer
self.german = german
self.english = english
}
func localized(in language: ContentLanguage) -> LocalizedPostSettings {
switch language {
case .english: return english
case .german: return german
}
}
init(file: SettingsFile, files: [String : FileResource], map: (String) -> Item?) {
self.navigation = NavigationSettings(file: file.navigation, map: map)
self.posts = PostSettings(file: file.posts, files: files)
self.pages = PageSettings(file: file.pages, files: files)
self.paths = PathSettings(file: file.paths)
self.audioPlayer = .init(file: file.audioPlayer, files: files)
self.german = .init(file: file.german)
self.english = .init(file: file.english)
}
var file: SettingsFile {
.init(
paths: paths.file,
navigation: navigation.file,
posts: posts.file,
pages: pages.file,
audioPlayer: audioPlayer.file,
german: german.file,
english: english.file)
}
}
extension Settings {
static let `default`: Settings = .init(
paths: .default,
navigation: .default,
posts: .default,
pages: .default,
audioPlayer: .default,
german: .german,
english: .english)
}