Improve path settings, add icons

This commit is contained in:
Christoph Hagen
2025-12-20 12:06:59 +01:00
parent 9848de02cb
commit 07ba77e337
15 changed files with 126 additions and 21 deletions

View File

@@ -22,6 +22,9 @@ final class Settings: ChangeObservableItem {
@Published
var audioPlayer: AudioPlayerSettings
@Published
var tools: ToolSettings
weak var content: Content?
var cancellables: Set<AnyCancellable> = []
@@ -31,13 +34,15 @@ final class Settings: ChangeObservableItem {
navigation: NavigationSettings,
posts: PostSettings,
pages: PageSettings,
audioPlayer: AudioPlayerSettings) {
audioPlayer: AudioPlayerSettings,
tools: ToolSettings) {
self.general = general
self.paths = paths
self.navigation = navigation
self.posts = posts
self.pages = pages
self.audioPlayer = audioPlayer
self.tools = tools
observeChildChanges()
}
@@ -58,6 +63,7 @@ final class Settings: ChangeObservableItem {
observe(posts)
observe(pages)
observe(audioPlayer)
observe(tools)
}
}
@@ -72,7 +78,8 @@ extension Settings {
navigation: .init(context: context, data: data.navigation),
posts: .init(context: context, data: data.posts),
pages: .init(context: context, data: data.pages),
audioPlayer: .init(context: context, data: data.audioPlayer))
audioPlayer: .init(context: context, data: data.audioPlayer),
tools: .init(context: context, data: data.tools))
content = context.content
}
@@ -84,7 +91,8 @@ extension Settings {
posts: posts.data,
pages: pages.data,
audioPlayer: audioPlayer.data,
tagOverview: tagOverview?.data)
tagOverview: tagOverview?.data,
tools: tools.data)
}
struct Data: Codable, Equatable {
@@ -95,6 +103,7 @@ extension Settings {
let pages: PageSettings.Data
let audioPlayer: AudioPlayerSettings.Data
let tagOverview: Tag.Data?
let tools: ToolSettings.Data
}
func saveToDisk(_ data: Data) -> Bool {
@@ -110,7 +119,8 @@ extension Settings {
navigation: .default,
posts: .default,
pages: .default,
audioPlayer: .default)
audioPlayer: .default,
tools: .default)
}
extension GeneralSettings {
@@ -195,3 +205,11 @@ extension PageSettings {
emptyPageText: "This page is empty"))
}
}
extension ToolSettings {
static var `default`: ToolSettings {
.init(ffprobePath: "/opt/homebrew/bin/ffprobe",
avifencPath: "/opt/homebrew/bin/avifenc")
}
}

View File

@@ -0,0 +1,39 @@
import Foundation
final class ToolSettings: ObservableObject {
/// The items to show in the navigation bar
@Published
var ffprobePath: String
@Published
var avifencPath: String
init(ffprobePath: String,
avifencPath: String) {
self.ffprobePath = ffprobePath
self.avifencPath = avifencPath
}
}
// MARK: Storage
extension ToolSettings {
convenience init(context: LoadingContext, data: ToolSettings.Data) {
self.init(
ffprobePath: data.ffprobePath,
avifencPath: data.avifencPath)
}
struct Data: Codable, Equatable {
let ffprobePath: String
let avifencPath: String
}
var data: Data {
.init(
ffprobePath: ffprobePath,
avifencPath: avifencPath)
}
}