Add single file audio player, introduce blocks

This commit is contained in:
Christoph Hagen
2025-01-06 01:17:06 +01:00
parent c78c359819
commit 245534e989
27 changed files with 521 additions and 88 deletions

View File

@ -0,0 +1,49 @@
import Foundation
final class AudioPlayerSettings: ObservableObject {
@Published
var playlistCoverImageSize: Int
@Published
var smallCoverImageSize: Int
@Published
var audioPlayerJsFile: FileResource?
@Published
var audioPlayerCssFile: FileResource?
init(playlistCoverImageSize: Int,
smallCoverImageSize: Int,
audioPlayerJsFile: FileResource?,
audioPlayerCssFile: FileResource?) {
self.playlistCoverImageSize = playlistCoverImageSize
self.smallCoverImageSize = smallCoverImageSize
self.audioPlayerJsFile = audioPlayerJsFile
self.audioPlayerCssFile = audioPlayerCssFile
}
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] }
}
var file: AudioPlayerSettingsFile {
.init(playlistCoverImageSize: playlistCoverImageSize,
smallCoverImageSize: smallCoverImageSize,
audioPlayerJsFile: audioPlayerJsFile?.id,
audioPlayerCssFile: audioPlayerCssFile?.id)
}
}
extension AudioPlayerSettings {
static let `default`: AudioPlayerSettings = .init(
playlistCoverImageSize: 280,
smallCoverImageSize: 78,
audioPlayerJsFile: nil,
audioPlayerCssFile: nil)
}

View File

@ -17,12 +17,6 @@ final class PageSettings: ObservableObject {
@Published
var codeHighlightingJsFile: FileResource?
@Published
var audioPlayerJsFile: FileResource?
@Published
var audioPlayerCssFile: FileResource?
@Published
var modelViewerJsFile: FileResource?
@ -38,8 +32,6 @@ final class PageSettings: ObservableObject {
self.pageLinkImageSize = file.pageLinkImageSize
self.defaultCssFile = file.defaultCssFile.map { files[$0] }
self.codeHighlightingJsFile = file.codeHighlightingJsFile.map { files[$0] }
self.audioPlayerJsFile = file.audioPlayerJsFile.map { files[$0] }
self.audioPlayerCssFile = file.audioPlayerCssFile.map { files[$0] }
self.modelViewerJsFile = file.modelViewerJsFile.map { files[$0] }
self.imageCompareCssFile = file.imageCompareCssFile.map { files[$0] }
self.imageCompareJsFile = file.imageCompareJsFile.map { files[$0] }
@ -51,8 +43,6 @@ final class PageSettings: ObservableObject {
pageLinkImageSize: pageLinkImageSize,
defaultCssFile: defaultCssFile?.id,
codeHighlightingJsFile: codeHighlightingJsFile?.id,
audioPlayerJsFile: audioPlayerJsFile?.id,
audioPlayerCssFile: audioPlayerCssFile?.id,
modelViewerJsFile: modelViewerJsFile?.id,
imageCompareJsFile: imageCompareJsFile?.id,
imageCompareCssFile: imageCompareCssFile?.id)

View File

@ -15,17 +15,28 @@ final class Settings: ObservableObject {
@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, german: LocalizedPostSettings, 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
}
@ -43,6 +54,7 @@ final class Settings: ObservableObject {
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)
@ -54,6 +66,7 @@ final class Settings: ObservableObject {
navigation: navigation.file,
posts: posts.file,
pages: pages.file,
audioPlayer: audioPlayer.file,
german: german.file,
english: english.file)
}
@ -66,6 +79,7 @@ extension Settings {
navigation: .default,
posts: .default,
pages: .default,
audioPlayer: .default,
german: .german,
english: .english)
}