import Foundation final class AudioPlayerSettings: ObservableObject { @Published var playlistCoverImageSize: Int @Published var smallCoverImageSize: Int @Published var audioPlayerJsFile: FileResource? @Published var audioPlayerCssFile: FileResource? @Published var german: LocalizedAudioPlayerSettings @Published var english: LocalizedAudioPlayerSettings init(playlistCoverImageSize: Int, smallCoverImageSize: Int, audioPlayerJsFile: FileResource?, audioPlayerCssFile: FileResource?, german: LocalizedAudioPlayerSettings, english: LocalizedAudioPlayerSettings) { self.playlistCoverImageSize = playlistCoverImageSize self.smallCoverImageSize = smallCoverImageSize self.audioPlayerJsFile = audioPlayerJsFile self.audioPlayerCssFile = audioPlayerCssFile self.german = german self.english = english } init(file: AudioPlayerSettingsFile, files: [String : FileResource]) { self.playlistCoverImageSize = file.playlistCoverImageSize self.smallCoverImageSize = file.smallCoverImageSize self.audioPlayerJsFile = file.audioPlayerJsFile.map { files[$0] } self.audioPlayerCssFile = file.audioPlayerCssFile.map { files[$0] } self.german = .init(file: file.german) self.english = .init(file: file.english) } var file: AudioPlayerSettingsFile { .init(playlistCoverImageSize: playlistCoverImageSize, smallCoverImageSize: smallCoverImageSize, audioPlayerJsFile: audioPlayerJsFile?.id, audioPlayerCssFile: audioPlayerCssFile?.id, german: german.file, english: english.file) } func remove(_ file: FileResource) { if audioPlayerJsFile == file { audioPlayerJsFile = nil } if audioPlayerCssFile == file { audioPlayerCssFile = nil } } } extension AudioPlayerSettings { static let `default`: AudioPlayerSettings = .init( playlistCoverImageSize: 280, smallCoverImageSize: 78, audioPlayerJsFile: nil, audioPlayerCssFile: nil, german: .init(playlistText: "Wiedergabeliste"), english: .init(playlistText: "Playlist")) } extension AudioPlayerSettings: LocalizedItem { }