Просмотр исходного кода

remove debug, comments, tests; show unique notifications in banner

kskandis 1 год назад
Родитель
Сommit
763237082b

+ 1 - 152
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -58,156 +58,6 @@ extension Home {
 
         // TODO: end todo
 
-        func sendTestRepeat(storedMessages: [MessageContent], repeats: Bool = false) { // TODO: REMOVE!!!
-            if repeats == true {
-                for _ in 0 ... 5 {
-                    for _ in 0 ... storedMessages.count - 1 {
-                        var count = 0
-                        _ = Timer.scheduledTimer(withTimeInterval: 2, repeats: true) { t in
-                            print(count)
-                            print(storedMessages[count].content)
-                            router.alertMessage.send(storedMessages[count])
-                            count += 1
-                            if count >= storedMessages.count {
-                                t.invalidate()
-                            }
-                        }
-                    }
-                }
-            } else {
-                for i in 0 ... storedMessages.count - 1 {
-                    print(i)
-                    print(storedMessages[i].content)
-                    DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
-                        router.alertMessage.send(storedMessages[i])
-                    }
-                }
-            }
-        }
-
-        func sendTestTriggerMessage() { // TODO: REMOVE!!!
-            var storedMessages: [MessageContent] = []
-            var messageCont: MessageContent
-
-            let firstInterval = 1 // min
-            let secondInterval = 2 // min
-            let firstTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 60 * TimeInterval(firstInterval), repeats: false)
-            messageCont = MessageContent(
-                content: "Last Loop was more than 20 min ago - TEST",
-                type: MessageType.info,
-                subtype: .algorithm,
-                title: "Trio Not Active",
-                useAPN: true,
-                trigger: firstTrigger
-            )
-            debug(
-                .default,
-                "TEST \(messageCont.title) \(messageCont.content) \(messageCont.type) \(messageCont.subtype)"
-            )
-            storedMessages.append(messageCont)
-
-            let secondTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 60 * TimeInterval(secondInterval), repeats: false)
-            messageCont = MessageContent(
-                content: "Last Loop was more than 40 min ago - TEST",
-                type: MessageType.warning,
-                subtype: .algorithm,
-                title: "Trio Not Active",
-                useAPN: true,
-                trigger: secondTrigger
-            )
-            debug(
-                .default,
-                "TEST \(messageCont.title) \(messageCont.content) \(messageCont.type) \(messageCont.subtype)"
-            )
-            storedMessages.append(messageCont)
-
-            sendTestRepeat(storedMessages: storedMessages, repeats: true)
-        }
-
-        func sendTestNotifications() { // TODO: REMOVE!!!
-            var storedMessages: [MessageContent] = []
-            var messageCont: MessageContent
-
-            sendTestTriggerMessage()
-
-            messageCont = MessageContent(
-                content: "68 mg/dL" + "↔︎" + "-1" + "\n" + "Plugin CGM Source",
-                type: MessageType.warning,
-                subtype: .glucose,
-                title: "LOWALERT! 68 mg/dL" + "↔︎" + "-1",
-                useAPN: true,
-                action: .snooze
-            )
-            router.alertMessage.send(messageCont)
-
-            messageCont = MessageContent(
-                content: "Insulin delivery stopped. Change Pod now.",
-                type: MessageType.error, // errorPump
-                subtype: .pump,
-                title: "Critical Pod Fault 008",
-                useAPN: true,
-                action: .pumpConfig
-            )
-            storedMessages.append(messageCont)
-
-            messageCont = MessageContent(
-                content: "Pod expires in 68 hours.",
-                type: MessageType.warning,
-                subtype: .pump,
-                title: "Pod Expiration Reminder"
-            )
-            storedMessages.append(messageCont)
-            messageCont = MessageContent(
-                content: "10 U insulin or less remaining in Pod. Change Pod soon.",
-                type: MessageType.warning,
-                subtype: .pump,
-                title: "Low Reservoir",
-                useAPN: true
-            )
-            storedMessages.append(messageCont)
-
-            messageCont = MessageContent(
-                content: "To prevent LOW required 30 g of carbs",
-                type: MessageType.warning,
-                subtype: .carb,
-                title: "Carbs required: 30 g"
-            )
-            storedMessages.append(messageCont)
-
-            messageCont = MessageContent(
-                content: "83 mg/dL" + "↔︎" + "-1", // + "\n" + "Plugin CGM Source",
-                type: MessageType.info,
-                subtype: .glucose,
-                title: "Glucose 83 mg/dL" + "↔︎" + "-1",
-                action: .snooze
-            )
-            storedMessages.append(messageCont)
-            messageCont = MessageContent(
-                content: "68 mg/dL" + "↔︎" + "-1" + "\n" + "Plugin CGM Source",
-                type: MessageType.warning,
-                subtype: .glucose,
-                title: "LOWALERT! 68 mg/dL" + "↔︎" + "-1"
-            )
-            storedMessages.append(messageCont)
-
-            messageCont = MessageContent(
-                content: "Error: Invalid glucose: Not enough glucose data",
-                type: MessageType.info,
-                subtype: .algorithm
-            )
-            storedMessages.append(messageCont)
-
-//            info(.apsManager, "Not enough glucose data")
-//            info(.apsManager, "Glucose data is stale")
-//            info(.apsManager, "Glucose data is too flat")
-//            info(.apsManager, "Glucose validation failed")
-//            info(.apsManager, "Loop not possible during the manual basal temp")
-//            info(.apsManager, "Temp Basal failed with error")
-//            info(.apsManager, "Pump not suspended by Announcement")
-
-            sendTestRepeat(storedMessages: storedMessages, repeats: false)
-        }
-
         var bolusProgressFormatter: NumberFormatter {
             let formatter = NumberFormatter()
             formatter.numberStyle = .decimal
@@ -927,7 +777,7 @@ extension Home {
             .background(color)
             .onReceive(
                 resolver.resolve(AlertPermissionsChecker.self)!.$notificationsDisabled,
-                perform: { // AlertPermissionsChecker
+                perform: {
                     if notificationsDisabled != $0 {
                         notificationsDisabled = $0
                         if notificationsDisabled {
@@ -972,7 +822,6 @@ extension Home {
                     )
                     .onTapGesture {
                         state.isStatusPopupPresented = false
-                        sendTestNotifications() // TODO: Remove!
                     }
                     .gesture(
                         DragGesture(minimumDistance: 10, coordinateSpace: .local)

+ 3 - 38
FreeAPS/Sources/Modules/Main/MainStateModel.swift

@@ -16,36 +16,12 @@ extension Main {
         @Persisted(key: "UserNotificationsManager.snoozeUntilDate") private var snoozeUntilDate: Date = .distantPast
         private var timers: [TimeInterval: Timer] = [:]
 
-        private var formatter: DateComponentsFormatter { // TODO: Remove debug only
-            let formatter = DateComponentsFormatter()
-            formatter.allowsFractionalUnits = false
-            formatter.unitsStyle = .full
-            return formatter
-        }
-
-        private var dateFormatter: DateFormatter { // TODO: Remove debug only
-            let formatter = DateFormatter()
-            formatter.timeStyle = .short
-            return formatter
-        }
-
-        private func formatInterval(_ interval: TimeInterval) -> String { // TODO: Remove debug only
-            formatter.string(from: interval)!
-        }
-
         private func showTriggeredView(
             message: MessageContent,
-            interval: TimeInterval,
+            interval _: TimeInterval,
             config: SwiftMessages.Config,
             view: MessageView
         ) {
-            let snoozeFor = formatter.string(from: interval)! // TODO: Remove debug only
-            let untilDate = Date() + interval
-            debug(
-                .default,
-                "Notification triggered for: \n \(String(describing: view.titleLabel?.text)) \(String(describing: view.bodyLabel?.text)) snoozed for \(snoozeFor) until \(dateFormatter.string(from: untilDate))"
-            )
-
             view.customConfigureTheme(
                 colorSchemePreference: colorSchemePreference
             )
@@ -60,15 +36,6 @@ extension Main {
             guard trigger.timeInterval > 0 else { return }
             let interval = trigger.timeInterval
 
-//            let interval = message.content.contains("20") ? TimeInterval(60) :
-//                TimeInterval(120) // TimeInterval(60) // trigger.timeInterval // TODO: remove 60 secs for test
-            let snoozeFor = formatter.string(from: interval)! // TODO: Remove debug only
-            let untilDate = Date() + interval
-            debug(
-                .default,
-                "\(message.title) \(message.content) \(message.type) \(message.subtype) will snooze for \(snoozeFor) until \(dateFormatter.string(from: untilDate)) for view.id \(view.id)"
-            )
-
             SwiftMessages.hide(id: view.id)
 
             // If a timer already exists for this interval, invalidate it
@@ -111,7 +78,7 @@ extension Main {
             let buttonImage = UIImage(systemName: "chevron.right")?.withTintColor(.white)
             view.button?.setImage(buttonImage, for: .normal)
             view.button?.backgroundColor = view.backgroundView.backgroundColor
-            view.button?.tintColor = view.iconImageView?.tintColor // .foregroundColor
+            view.button?.tintColor = view.iconImageView?.tintColor
         }
 
         private func setupAction(message: MessageContent, view: MessageView) {
@@ -185,8 +152,6 @@ extension Main {
         @AppStorage("colorSchemePreference") private var colorSchemePreference: ColorSchemeOption = .systemDefault
 
         private func showSwiftMessage(_ message: MessageContent) {
-            // SwiftMessages.pauseBetweenMessages = 1.0
-
             if snoozeUntilDate > Date(), message.action == .snooze {
                 return
             }
@@ -361,6 +326,6 @@ extension UIFont {
     static func preferredFontforStyle(forTextStyle: UIFont.TextStyle) -> UIFont {
         let uiFontMetrics = UIFontMetrics.default
         let descriptor = UIFontDescriptor.preferredFontDescriptor(withTextStyle: forTextStyle)
-        return uiFontMetrics.scaledFont(for: UIFont(descriptor: descriptor, size: 0)) // size: 12
+        return uiFontMetrics.scaledFont(for: UIFont(descriptor: descriptor, size: 0))
     }
 }

+ 12 - 13
FreeAPS/Sources/Services/UserNotifications/UserNotificationsManager.swift

@@ -68,6 +68,9 @@ final class BaseUserNotificationsManager: NSObject, UserNotificationsManager, In
     private var coreDataPublisher: AnyPublisher<Set<NSManagedObject>, Never>?
     private var subscriptions = Set<AnyCancellable>()
 
+    let firstInterval = 20 // min
+    let secondInterval = 40 // min
+
     init(resolver: Resolver) {
         super.init()
         center.delegate = self
@@ -174,9 +177,6 @@ final class BaseUserNotificationsManager: NSObject, UserNotificationsManager, In
         let title = NSLocalizedString("Trio Not Active", comment: "Trio Not Active")
         let body = NSLocalizedString("Last loop was more than %d min ago", comment: "Last loop was more than %d min ago")
 
-        let firstInterval = 20 // min
-        let secondInterval = 40 // min
-
         let firstContent = UNMutableNotificationContent()
         firstContent.title = title
         firstContent.body = String(format: body, firstInterval)
@@ -415,7 +415,10 @@ final class BaseUserNotificationsManager: NSObject, UserNotificationsManager, In
             router.alertMessage.send(messageCont)
             return
         }
-        let request = UNNotificationRequest(identifier: identifier.rawValue, content: content, trigger: trigger)
+        var alertIdentifier = identifier.rawValue
+        alertIdentifier = identifier == .pumpNotification ? alertIdentifier + content
+            .title : (identifier == .alertMessageNotification ? alertIdentifier + content.body : alertIdentifier)
+        let request = UNNotificationRequest(identifier: alertIdentifier, content: content, trigger: trigger)
 
         if deleteOld {
             DispatchQueue.main.async {
@@ -509,9 +512,10 @@ extension BaseUserNotificationsManager: alertMessageNotificationObserver {
             identifier = .glucocoseNotification
         case .algorithm:
             if message.trigger != nil {
-                identifier = .noLoopFirstNotification
+                identifier = message.content.contains(String(firstInterval)) ? Identifier.noLoopFirstNotification : Identifier
+                    .noLoopSecondNotification
             } else {
-                identifier = .alertMessageNotification
+                identifier = Identifier.alertMessageNotification
             }
         default:
             identifier = .alertMessageNotification
@@ -588,15 +592,10 @@ extension BaseUserNotificationsManager: BolusFailureObserver {
 extension BaseUserNotificationsManager: UNUserNotificationCenterDelegate {
     func userNotificationCenter(
         _: UNUserNotificationCenter,
-        willPresent notification: UNNotification,
+        willPresent _: UNNotification,
         withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
     ) {
-        switch notification.request.identifier {
-        case Identifier.pumpNotification.rawValue:
-            completionHandler([.banner, .badge, .sound, .list])
-        default:
-            completionHandler([.banner, .badge, .sound, .list])
-        }
+        completionHandler([.banner, .badge, .sound])
     }
 
     func userNotificationCenter(