Rework storage structs, link preview

This commit is contained in:
Christoph Hagen
2025-01-08 14:59:04 +01:00
parent b99c064d10
commit a7197b9628
75 changed files with 1365 additions and 1454 deletions

View File

@ -1,6 +1,6 @@
import Foundation
final class AudioPlayerSettings: ObservableObject {
final class AudioPlayerSettings: ObservableObject, LocalizedItem {
@Published
var playlistCoverImageSize: Int
@ -34,24 +34,6 @@ final class AudioPlayerSettings: ObservableObject {
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
@ -62,17 +44,37 @@ final class AudioPlayerSettings: ObservableObject {
}
}
// MARK: Storage
extension AudioPlayerSettings {
static let `default`: AudioPlayerSettings = .init(
playlistCoverImageSize: 280,
smallCoverImageSize: 78,
audioPlayerJsFile: nil,
audioPlayerCssFile: nil,
german: .init(playlistText: "Wiedergabeliste"),
english: .init(playlistText: "Playlist"))
}
convenience init(context: LoadingContext, data: Data) {
self.init(
playlistCoverImageSize: data.playlistCoverImageSize,
smallCoverImageSize: data.smallCoverImageSize,
audioPlayerJsFile: data.audioPlayerJsFile.map(context.file),
audioPlayerCssFile: data.audioPlayerCssFile.map(context.file),
german: .init(data: data.german),
english: .init(data: data.english))
}
var data: Data {
.init(playlistCoverImageSize: playlistCoverImageSize,
smallCoverImageSize: smallCoverImageSize,
audioPlayerJsFile: audioPlayerJsFile?.id,
audioPlayerCssFile: audioPlayerCssFile?.id,
german: german.data,
english: english.data)
}
struct Data: Codable {
let playlistCoverImageSize: Int
let smallCoverImageSize: Int
let audioPlayerJsFile: String?
let audioPlayerCssFile: String?
let german: LocalizedAudioPlayerSettings.Data
let english: LocalizedAudioPlayerSettings.Data
}
extension AudioPlayerSettings: LocalizedItem {
}