2024-05-15 20:49:07 +02:00
|
|
|
import UserNotifications
|
2024-06-08 00:15:33 +02:00
|
|
|
import UIKit
|
2024-05-15 20:49:07 +02:00
|
|
|
|
|
|
|
let APP_GROUP = "group.app.bsky"
|
|
|
|
|
|
|
|
class NotificationService: UNNotificationServiceExtension {
|
|
|
|
var prefs = UserDefaults(suiteName: APP_GROUP)
|
|
|
|
|
|
|
|
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
|
2024-05-18 01:05:32 +02:00
|
|
|
guard let bestAttempt = createCopy(request.content),
|
2024-05-15 20:49:07 +02:00
|
|
|
let reason = request.content.userInfo["reason"] as? String
|
|
|
|
else {
|
|
|
|
contentHandler(request.content)
|
|
|
|
return
|
|
|
|
}
|
2024-07-12 03:15:35 +02:00
|
|
|
|
2024-05-15 20:49:07 +02:00
|
|
|
if reason == "chat-message" {
|
|
|
|
mutateWithChatMessage(bestAttempt)
|
2024-05-18 01:05:32 +02:00
|
|
|
} else {
|
|
|
|
mutateWithBadge(bestAttempt)
|
2024-05-15 20:49:07 +02:00
|
|
|
}
|
2024-07-12 03:15:35 +02:00
|
|
|
|
2024-05-15 20:49:07 +02:00
|
|
|
contentHandler(bestAttempt)
|
|
|
|
}
|
2024-07-12 03:15:35 +02:00
|
|
|
|
2024-05-15 20:49:07 +02:00
|
|
|
override func serviceExtensionTimeWillExpire() {
|
|
|
|
// If for some reason the alloted time expires, we don't actually want to display a notification
|
|
|
|
}
|
2024-07-12 03:15:35 +02:00
|
|
|
|
2024-05-15 20:49:07 +02:00
|
|
|
func createCopy(_ content: UNNotificationContent) -> UNMutableNotificationContent? {
|
|
|
|
return content.mutableCopy() as? UNMutableNotificationContent
|
|
|
|
}
|
2024-07-12 03:15:35 +02:00
|
|
|
|
2024-05-15 20:49:07 +02:00
|
|
|
func mutateWithBadge(_ content: UNMutableNotificationContent) {
|
2024-06-08 00:15:33 +02:00
|
|
|
var count = prefs?.integer(forKey: "badgeCount") ?? 0
|
|
|
|
count += 1
|
2024-07-12 03:15:35 +02:00
|
|
|
|
2024-06-08 00:15:33 +02:00
|
|
|
// Set the new badge number for the notification, then store that value for using later
|
|
|
|
content.badge = NSNumber(value: count)
|
|
|
|
prefs?.setValue(count, forKey: "badgeCount")
|
2024-05-15 20:49:07 +02:00
|
|
|
}
|
2024-07-12 03:15:35 +02:00
|
|
|
|
2024-05-15 20:49:07 +02:00
|
|
|
func mutateWithChatMessage(_ content: UNMutableNotificationContent) {
|
|
|
|
if self.prefs?.bool(forKey: "playSoundChat") == true {
|
|
|
|
mutateWithDmSound(content)
|
|
|
|
}
|
|
|
|
}
|
2024-07-12 03:15:35 +02:00
|
|
|
|
2024-05-15 20:49:07 +02:00
|
|
|
func mutateWithDefaultSound(_ content: UNMutableNotificationContent) {
|
|
|
|
content.sound = UNNotificationSound.default
|
|
|
|
}
|
2024-07-12 03:15:35 +02:00
|
|
|
|
2024-05-15 20:49:07 +02:00
|
|
|
func mutateWithDmSound(_ content: UNMutableNotificationContent) {
|
|
|
|
content.sound = UNNotificationSound(named: UNNotificationSoundName(rawValue: "dm.aiff"))
|
|
|
|
}
|
|
|
|
}
|