// // Notification.swift // ProjectClock // // Created by Aaron Saporito on 1/24/21. // import Foundation import UserNotifications class Notification { //Removes the notifiation static func removeNotification(alarm: Alarm) { UNUserNotificationCenter.current().getPendingNotificationRequests { (notificationRequests) in var identifiers: [String] = [] for notification:UNNotificationRequest in notificationRequests { if notification.identifier == alarm.notificationID { identifiers.append(notification.identifier) } } UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: identifiers) } } // Check for duplicates and adds any missing notifications static func bulkScheduleNotifications(alarms: [Alarm]) { var ids: [String] = [] UNUserNotificationCenter.current().getPendingNotificationRequests { (notificationRequests) in for notification:UNNotificationRequest in notificationRequests { ids.append(notification.identifier) } for alarm in alarms { if !ids.contains(alarm.notificationID) { scheduleNotification(alarm: alarm) } } } } static func scheduleNotification(alarm: Alarm) { let content = UNMutableNotificationContent() //Date formatting to string let today = Date() let formatter1 = DateFormatter() formatter1.dateFormat = "MMM d, h:mm" //Notification content content.title = alarm.text content.subtitle = formatter1.string(from: today) content.body = "Wake method: \(alarm.wakeMethod.name)" content.sound = UNNotificationSound(named: UNNotificationSoundName(rawValue: "notif.caf")) // Notification image content let imageName = "AlarmLogo1" guard let imageURL = Bundle.main.url(forResource: imageName, withExtension: "png") else { return } let attachment = try! UNNotificationAttachment(identifier: imageName, url: imageURL, options: .none) content.attachments = [attachment] // Scheduels alarm notification for proper time let interval = alarm.nextActivate!.timeIntervalSince(Date()) guard interval > 0 else { return } let trigger = UNTimeIntervalNotificationTrigger(timeInterval: alarm.nextActivate!.timeIntervalSince(Date()), repeats: false) let request = UNNotificationRequest(identifier: alarm.notificationID, content: content, trigger: trigger) // Sends notification UNUserNotificationCenter.current().add(request, withCompletionHandler: nil) } }