From 929127cb8f8c272041709eb0017a702128507f90 Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 10 Feb 2023 10:03:40 +0100 Subject: [PATCH] Fixes sounds selection --- LeCountdown/CountdownScheduler.swift | 1 + .../Views/Components/SoundSelectionView.swift | 6 ++-- LeCountdown/Views/Components/TimerModel.swift | 28 +++++++++++++++++-- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/LeCountdown/CountdownScheduler.swift b/LeCountdown/CountdownScheduler.swift index 65683df..a34d32c 100644 --- a/LeCountdown/CountdownScheduler.swift +++ b/LeCountdown/CountdownScheduler.swift @@ -44,6 +44,7 @@ class CountdownScheduler { content.body = body content.sound = UNNotificationSound(named: UNNotificationSoundName(rawValue: countdown.soundName)) content.interruptionLevel = .critical + content.relevanceScore = 1.0 let notificationCount = 1 + countdown.repeatCount diff --git a/LeCountdown/Views/Components/SoundSelectionView.swift b/LeCountdown/Views/Components/SoundSelectionView.swift index 4780034..d5630ee 100644 --- a/LeCountdown/Views/Components/SoundSelectionView.swift +++ b/LeCountdown/Views/Components/SoundSelectionView.swift @@ -35,12 +35,12 @@ struct PlaylistSectionView: View { Section { let sounds = SoundCatalog.main.sounds(for: self.playlist) List(sounds) { sound in - ToggleRow(item: sound, selected: self.model.isSelected(sound: sound)) { selected in + ToggleRow(item: sound, selected: self.model.binding(sound: sound)) { selected in self.model.selectSound(sound, selected: selected) } } } header: { - ToggleRow(item: self.playlist, selected: self.model.isSelected(playlist: self.playlist)) { selected in + ToggleRow(item: self.playlist, selected: self.model.binding(playlist: playlist)) { selected in self.model.selectPlaylist(self.playlist, selected: selected) } } @@ -51,7 +51,7 @@ struct PlaylistSectionView: View { struct ToggleRow: View { var item: T - @State var selected: Bool + @Binding var selected: Bool var handleSelection: (Bool) -> () var body: some View { diff --git a/LeCountdown/Views/Components/TimerModel.swift b/LeCountdown/Views/Components/TimerModel.swift index c951cc0..06e7320 100644 --- a/LeCountdown/Views/Components/TimerModel.swift +++ b/LeCountdown/Views/Components/TimerModel.swift @@ -6,6 +6,7 @@ // import Foundation +import SwiftUI protocol SoundHolder { func selectSound(_ sound: Sound, selected: Bool) @@ -20,6 +21,25 @@ class TimerModel : ObservableObject, SoundHolder { @Published var playlists: Set = [] @Published var sounds: Set = [] + func binding(sound: Sound) -> Binding { + return Binding(get: { + return self.sounds.contains(sound) + }, set: { value in + if value { self.sounds.insert(sound) } + else { self.sounds.remove(sound) } + }) + } + + func binding(playlist: Playlist) -> Binding { + return Binding(get: { + return self.playlists.contains(playlist) + }, set: { value in + if value { self.playlists.insert(playlist) } + else { self.playlists.remove(playlist) } + }) + } + + // MARK: - SoundHolder func selectSound(_ sound: Sound, selected: Bool) { @@ -45,14 +65,16 @@ class TimerModel : ObservableObject, SoundHolder { func selectPlaylist(_ playlist: Playlist, selected: Bool) { print("selectPlaylist") + let sounds: [Sound] = SoundCatalog.main.sounds(for: playlist) if selected { self.playlists.insert(playlist) + self.sounds.formUnion(sounds) } else { self.playlists.remove(playlist) + if self.sounds.isSuperset(of: sounds) { + self.sounds.formSymmetricDifference(sounds) + } } - - let sounds: [Sound] = SoundCatalog.main.sounds(for: playlist) - self.sounds.formSymmetricDifference(sounds) print("sounds = \(self.sounds.count)") }