🐛 Fix the NSE again...
This commit is contained in:
		@@ -9,6 +9,7 @@ import UserNotifications
 | 
			
		||||
import Intents
 | 
			
		||||
import Kingfisher
 | 
			
		||||
import UniformTypeIdentifiers
 | 
			
		||||
import KingfisherWebP
 | 
			
		||||
 | 
			
		||||
enum ParseNotificationPayloadError: Error {
 | 
			
		||||
    case missingMetadata(String)
 | 
			
		||||
@@ -24,6 +25,11 @@ class NotificationService: UNNotificationServiceExtension {
 | 
			
		||||
        _ request: UNNotificationRequest,
 | 
			
		||||
        withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void
 | 
			
		||||
    ) {
 | 
			
		||||
        KingfisherManager.shared.defaultOptions += [
 | 
			
		||||
          .processor(WebPProcessor.default),
 | 
			
		||||
          .cacheSerializer(WebPSerializer.default)
 | 
			
		||||
        ]
 | 
			
		||||
        
 | 
			
		||||
        self.contentHandler = contentHandler
 | 
			
		||||
        guard let bestAttemptContent = request.content.mutableCopy() as? UNMutableNotificationContent else {
 | 
			
		||||
            contentHandler(request.content)
 | 
			
		||||
@@ -64,40 +70,12 @@ class NotificationService: UNNotificationServiceExtension {
 | 
			
		||||
 | 
			
		||||
        let handle = INPersonHandle(value: "\(metaCopy["user_id"] ?? "")", type: .unknown)
 | 
			
		||||
 | 
			
		||||
        if let pfpUrl = pfpUrl, let url = URL(string: pfpUrl) {
 | 
			
		||||
            let targetSize = 512
 | 
			
		||||
            let scaleProcessor = ResizingImageProcessor(referenceSize: CGSize(width: targetSize, height: targetSize), mode: .aspectFit)
 | 
			
		||||
 | 
			
		||||
            KingfisherManager.shared.retrieveImage(with: url, options: [.processor(scaleProcessor)], completionHandler: { result in
 | 
			
		||||
                var image: Data?
 | 
			
		||||
                switch result {
 | 
			
		||||
                case .success(let value):
 | 
			
		||||
                    image = value.image.pngData()
 | 
			
		||||
                case .failure(let error):
 | 
			
		||||
                    print("Unable to get pfp url: \(error)")
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                let sender = INPerson(
 | 
			
		||||
                    personHandle: handle,
 | 
			
		||||
                    nameComponents: PersonNameComponents(nickname: "\(metaCopy["sender_name"] ?? "")"),
 | 
			
		||||
                    displayName: content.title,
 | 
			
		||||
                    image: image == nil ? nil : INImage(imageData: image!),
 | 
			
		||||
                    contactIdentifier: nil,
 | 
			
		||||
                    customIdentifier: nil
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                let intent = self.createMessageIntent(with: sender, meta: metaCopy, body: content.body)
 | 
			
		||||
                self.donateInteraction(for: intent)
 | 
			
		||||
 | 
			
		||||
                content.categoryIdentifier = "CHAT_MESSAGE"
 | 
			
		||||
                self.contentHandler?(content)
 | 
			
		||||
            })
 | 
			
		||||
        } else {
 | 
			
		||||
        let completeNotificationProcessing: (Data?) -> Void = { imageData in
 | 
			
		||||
            let sender = INPerson(
 | 
			
		||||
                personHandle: handle,
 | 
			
		||||
                nameComponents: PersonNameComponents(nickname: "\(metaCopy["sender_name"] ?? "")"),
 | 
			
		||||
                displayName: content.title,
 | 
			
		||||
                image: nil,
 | 
			
		||||
                image: imageData == nil ? nil : INImage(imageData: imageData!),
 | 
			
		||||
                contactIdentifier: nil,
 | 
			
		||||
                customIdentifier: nil
 | 
			
		||||
            )
 | 
			
		||||
@@ -105,8 +83,37 @@ class NotificationService: UNNotificationServiceExtension {
 | 
			
		||||
            let intent = self.createMessageIntent(with: sender, meta: metaCopy, body: content.body)
 | 
			
		||||
            self.donateInteraction(for: intent)
 | 
			
		||||
 | 
			
		||||
            content.categoryIdentifier = "CHAT_MESSAGE"
 | 
			
		||||
            self.contentHandler?(content)
 | 
			
		||||
            if let updatedContent = try? request.content.updating(from: intent) {
 | 
			
		||||
                if let mutableContent = updatedContent.mutableCopy() as? UNMutableNotificationContent {
 | 
			
		||||
                    mutableContent.categoryIdentifier = "CHAT_MESSAGE"
 | 
			
		||||
                    self.contentHandler?(mutableContent)
 | 
			
		||||
                } else {
 | 
			
		||||
                    self.contentHandler?(updatedContent)
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                content.categoryIdentifier = "CHAT_MESSAGE"
 | 
			
		||||
                self.contentHandler?(content)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if let pfpUrl = pfpUrl, let url = URL(string: pfpUrl) {
 | 
			
		||||
            let targetSize = 512
 | 
			
		||||
            let scaleProcessor = ResizingImageProcessor(referenceSize: CGSize(width: targetSize, height: targetSize), mode: .aspectFit)
 | 
			
		||||
 | 
			
		||||
            KingfisherManager.shared.retrieveImage(with: url, options: [
 | 
			
		||||
                .processor(scaleProcessor)
 | 
			
		||||
            ], completionHandler: { result in
 | 
			
		||||
                var image: Data?
 | 
			
		||||
                switch result {
 | 
			
		||||
                case .success(let value):
 | 
			
		||||
                    image = value.image.pngData()
 | 
			
		||||
                case .failure(let error):
 | 
			
		||||
                    print("Unable to get pfp url: \(error)")
 | 
			
		||||
                }
 | 
			
		||||
                completeNotificationProcessing(image)
 | 
			
		||||
            })
 | 
			
		||||
        } else {
 | 
			
		||||
            completeNotificationProcessing(nil)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user