| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import Combine
- import SwiftUI
- extension CalendarEventSettings {
- final class StateModel: BaseStateModel<Provider> {
- @Injected() var settings: SettingsManager!
- @Injected() var storage: FileStorage!
- @Injected() var calendarManager: CalendarManager!
- @Published var units: GlucoseUnits = .mgdL
- @Published var useCalendar = false
- @Published var displayCalendarIOBandCOB = false
- @Published var displayCalendarEmojis = false
- @Published var calendarIDs: [String] = []
- @Published var currentCalendarID: String = ""
- @Persisted(key: "CalendarManager.currentCalendarID") var storedCalendarID: String? = nil
- override func subscribe() {
- units = settingsManager.settings.units
- currentCalendarID = storedCalendarID ?? ""
- calendarIDs = calendarManager.calendarIDs()
- subscribeSetting(\.useCalendar, on: $useCalendar) { useCalendar = $0 }
- subscribeSetting(\.displayCalendarIOBandCOB, on: $displayCalendarIOBandCOB) { displayCalendarIOBandCOB = $0 }
- subscribeSetting(\.displayCalendarEmojis, on: $displayCalendarEmojis) { displayCalendarEmojis = $0 }
- observeCreateCalendarEvents()
- observeCurrentCalendarID()
- }
- private func observeCreateCalendarEvents() {
- Task {
- for await ok in $useCalendar.removeDuplicates().values {
- guard ok else { continue }
- let accessGranted = await calendarManager.requestAccessIfNeeded()
- if accessGranted {
- let ids = calendarManager.calendarIDs()
- await MainActor.run {
- self.calendarIDs = ids
- }
- }
- }
- }
- }
- private func observeCurrentCalendarID() {
- Task {
- for await id in $currentCalendarID.removeDuplicates().values {
- if id.isEmpty {
- calendarManager.currentCalendarID = nil
- } else {
- calendarManager.currentCalendarID = id
- }
- }
- }
- }
- }
- }
- extension CalendarEventSettings.StateModel: SettingsObserver {
- func settingsDidChange(_: FreeAPSSettings) {
- units = settingsManager.settings.units
- }
- }
|