import Foundation final class PostSettings: ObservableObject { /// The number of posts to show in a single page of the news feed @Published var postsPerPage: Int /// The maximum width of the main content @Published var contentWidth: Int @Published var swiperCssFile: FileResource? @Published var swiperJsFile: FileResource? @Published var defaultCssFile: FileResource? @Published var german: LocalizedPostSettings @Published var english: LocalizedPostSettings init(postsPerPage: Int, contentWidth: Int, swiperCssFile: FileResource?, swiperJsFile: FileResource?, defaultCssFile: FileResource?, german: LocalizedPostSettings, english: LocalizedPostSettings) { self.postsPerPage = postsPerPage self.contentWidth = contentWidth self.swiperCssFile = swiperCssFile self.swiperJsFile = swiperJsFile self.defaultCssFile = defaultCssFile self.german = german self.english = english } // MARK: Storage init(file: PostSettingsFile, files: [String : FileResource]) { self.postsPerPage = file.postsPerPage self.contentWidth = file.contentWidth self.swiperCssFile = file.swiperCssFile.map { files[$0] } self.swiperJsFile = file.swiperJsFile.map { files[$0] } self.defaultCssFile = file.defaultCssFile.map { files[$0] } self.german = .init(file: file.german) self.english = .init(file: file.english) } var file: PostSettingsFile { .init(postsPerPage: postsPerPage, contentWidth: contentWidth, swiperCssFile: swiperCssFile?.id, swiperJsFile: swiperJsFile?.id, defaultCssFile: defaultCssFile?.id, german: german.file, english: english.file) } func remove(_ file: FileResource) { if swiperJsFile == file { swiperJsFile = nil } if swiperCssFile == file { swiperCssFile = nil } if defaultCssFile == file { defaultCssFile = nil } } } extension PostSettings { static var `default`: PostSettings { .init(file: .default, files: [:]) } } extension PostSettings: LocalizedItem { }