From 6f870ffa4fe6bae22ecabf7943b0702048e0c103 Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Wed, 25 Jun 2025 20:20:38 +0100 Subject: [PATCH] improve notification handling fix crash on ocmpleting events --- Shared/CompleteEventButton.swift | 2 +- Shared/Model/Events.swift | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/Shared/CompleteEventButton.swift b/Shared/CompleteEventButton.swift index 31f9636..43abdf1 100644 --- a/Shared/CompleteEventButton.swift +++ b/Shared/CompleteEventButton.swift @@ -35,7 +35,7 @@ struct CompleteEventButton: View { progress = 0 timer = Timer(timeInterval: 0.02, repeats: true) { timer in - DispatchQueue.main.sync { + DispatchQueue.main.async { guard completeInProgress else { return } guard let timer = self.timer else { return } guard timer.isValid else { return } diff --git a/Shared/Model/Events.swift b/Shared/Model/Events.swift index 0d9835d..dd224ab 100644 --- a/Shared/Model/Events.swift +++ b/Shared/Model/Events.swift @@ -160,20 +160,24 @@ class EventViewModel: ObservableObject, @unchecked Sendable { eventUUIDs.remove(at: remove) } let components = getDateComponents(events[index].date) + //check the notif matches event details if req.content.title == events[index].name, req.content.subtitle == events[index].notes, req.trigger == UNCalendarNotificationTrigger(dateMatching: components, repeats: false) { - //if it does, make sure the notif delets if u complete the veent - if events[index].complete { + //if it does, make sure the notif delets if u complete the veent or in the past + if events[index].complete || events[index].date > .now { cancelNotif(req.identifier) + } else { + //dont cancel the notif } } else { + //reschedult it because the event details have changed cancelNotif(req.identifier) scheduleEventNotif(events[index]) } } else { - //cancel if the event is deleted + //cancel notif if the event is deleted (doesnt exist/cannot be matched) cancelNotif(req.identifier) } } @@ -182,6 +186,14 @@ class EventViewModel: ObservableObject, @unchecked Sendable { scheduleEventNotif(event) } } + Task { + try? await UNUserNotificationCenter.current().setBadgeCount(await getNotifs().count) + } + print(eventUUIDs.count) + print(events.count(where: {!$0.complete && $0.date < .now})) + print(events.count(where: {!$0.complete && $0.date > .now})) + print(events.count(where: {!$0.complete})) + print(events.count(where: {$0.complete})) } // save to local and icloud @@ -246,7 +258,6 @@ class EventViewModel: ObservableObject, @unchecked Sendable { } if let eventToModify = eventToModify { self.events.remove(at: eventToModify) - self.saveEvents() } saveEvents() //sync local and icl }