ChWebsiteApp/CHDataManagement/Model/Settings/AudioPlayerSettings.swift
2025-01-07 14:04:00 +01:00

79 lines
2.3 KiB
Swift

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 {
}