diff --git a/CHDataManagement/Model/Settings/Settings.swift b/CHDataManagement/Model/Settings/Settings.swift index dbe345b..3945c5e 100644 --- a/CHDataManagement/Model/Settings/Settings.swift +++ b/CHDataManagement/Model/Settings/Settings.swift @@ -38,6 +38,7 @@ final class Settings: ChangeObservableItem { self.posts = posts self.pages = pages self.audioPlayer = audioPlayer + observeChildChanges() } func remove(_ file: FileResource) { @@ -49,6 +50,15 @@ final class Settings: ChangeObservableItem { func needsSaving() { content?.needsSave() } + + private func observeChildChanges() { + observe(general) + observe(paths) + observe(navigation) + observe(posts) + observe(pages) + observe(audioPlayer) + } } // MARK: Storage diff --git a/CHDataManagement/Storage/ChangeObservableItem.swift b/CHDataManagement/Storage/ChangeObservableItem.swift index dba7fd5..9853cbc 100644 --- a/CHDataManagement/Storage/ChangeObservableItem.swift +++ b/CHDataManagement/Storage/ChangeObservableItem.swift @@ -16,6 +16,14 @@ extension ChangeObservableItem { } .store(in: &cancellables) } + + func observe(_ object: T) where T: ObservableObject { + object.objectWillChange + .sink { [weak self] _ in + self?.needsSaving() + } + .store(in: &cancellables) + } } protocol ObservableContentItem: ChangeObservableItem {