Save automatically, improve mocks

This commit is contained in:
Christoph Hagen
2025-02-05 12:24:33 +01:00
parent d41c54d174
commit 5abe6e1a9f
55 changed files with 701 additions and 381 deletions

View File

@ -67,7 +67,7 @@ extension AudioPlayerSettings {
english: english.data)
}
struct Data: Codable {
struct Data: Codable, Equatable {
let playlistCoverImageSize: Int
let smallCoverImageSize: Int
let audioPlayerJsFile: String?

View File

@ -34,7 +34,7 @@ extension GeneralSettings {
linkPreviewImageHeight: linkPreviewImageHeight)
}
struct Data: Codable {
struct Data: Codable, Equatable {
let url: String
let linkPreviewImageWidth: Int
let linkPreviewImageHeight: Int

View File

@ -22,7 +22,7 @@ extension LocalizedAudioPlayerSettings {
.init(playlistText: playlistText)
}
struct Data: Codable {
struct Data: Codable, Equatable {
let playlistText: String
}
}

View File

@ -18,7 +18,7 @@ extension LocalizedNavigationSettings {
self.init(rootUrl: data.rootUrl)
}
struct Data: Codable {
struct Data: Codable, Equatable {
let rootUrl: String
}

View File

@ -31,7 +31,7 @@ extension LocalizedPageSettings {
emptyPageText: emptyPageText)
}
struct Data: Codable {
struct Data: Codable, Equatable {
let emptyPageTitle: String
let emptyPageText: String
}

View File

@ -41,7 +41,7 @@ extension LocalizedPostSettings {
linkPreview: linkPreview.data)
}
struct Data: Codable {
struct Data: Codable, Equatable {
let feedUrlPrefix: String
let defaultPageLinkText: String
let linkPreview: LinkPreview.Data

View File

@ -32,7 +32,7 @@ extension NavigationSettings {
english: LocalizedNavigationSettings(data: data.english))
}
struct Data: Codable {
struct Data: Codable, Equatable {
let navigationItems: [ItemId]
let german: LocalizedNavigationSettings.Data
let english: LocalizedNavigationSettings.Data

View File

@ -104,7 +104,7 @@ extension PageSettings {
english: english.data)
}
struct Data: Codable {
struct Data: Codable, Equatable {
let contentWidth: Int
let largeImageWidth: Int
let pageLinkImageSize: Int

View File

@ -64,7 +64,7 @@ extension PathSettings {
tagsOutputFolderPath: tagsOutputFolderPath)
}
struct Data: Codable {
struct Data: Codable, Equatable {
let assetsOutputFolderPath: String
let pagesOutputFolderPath: String
let imagesOutputFolderPath: String

View File

@ -79,7 +79,7 @@ extension PostSettings {
english: english.data)
}
struct Data: Codable {
struct Data: Codable, Equatable {
let postsPerPage: Int
let contentWidth: Int
let swiperCssFile: String?

View File

@ -1,6 +1,7 @@
import Foundation
import Combine
final class Settings: ObservableObject {
final class Settings: ChangeObservableItem {
@Published
var general: GeneralSettings
@ -21,6 +22,10 @@ final class Settings: ObservableObject {
@Published
var audioPlayer: AudioPlayerSettings
weak var content: Content?
var cancellables: Set<AnyCancellable> = []
init(general: GeneralSettings,
paths: PathSettings,
navigation: NavigationSettings,
@ -40,6 +45,10 @@ final class Settings: ObservableObject {
posts.remove(file)
audioPlayer.remove(file)
}
func needsSaving() {
content?.needsSave()
}
}
// MARK: Storage
@ -54,6 +63,7 @@ extension Settings {
posts: .init(context: context, data: data.posts),
pages: .init(context: context, data: data.pages),
audioPlayer: .init(context: context, data: data.audioPlayer))
content = context.content
}
func data(tagOverview: Tag?) -> Data {
@ -67,7 +77,7 @@ extension Settings {
tagOverview: tagOverview?.data)
}
struct Data: Codable {
struct Data: Codable, Equatable {
let general: GeneralSettings.Data
let paths: PathSettings.Data
let navigation: NavigationSettings.Data
@ -76,6 +86,10 @@ extension Settings {
let audioPlayer: AudioPlayerSettings.Data
let tagOverview: Tag.Data?
}
func saveToDisk(_ data: Data) -> Bool {
content?.storage.save(settings: data) ?? false
}
}
extension Settings {