summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorJoe Donofry <rubberduckie3554@gmail.com>2021-11-03 02:42:19 +0000
committerNicolas Werner <nicolas.werner@hotmail.de>2021-11-03 02:42:19 +0000
commite3002f79930276505152b9e989f69c9227211cb0 (patch)
tree3f354533bab13fc6077c0f70ddac443ec97be34f /src
parentMerge branch 'macos_api_updates' into 'master' (diff)
downloadnheko-e3002f79930276505152b9e989f69c9227211cb0.tar.xz
Fix macOS m.image notif crash
Diffstat (limited to 'src')
-rw-r--r--src/notifications/ManagerMac.mm41
1 files changed, 34 insertions, 7 deletions
diff --git a/src/notifications/ManagerMac.mm b/src/notifications/ManagerMac.mm
index b5ef3bfe..8669432b 100644
--- a/src/notifications/ManagerMac.mm
+++ b/src/notifications/ManagerMac.mm
@@ -7,6 +7,33 @@
 #include <QtMac>
 #include <QImage>
 
+@interface UNNotificationAttachment (UNNotificationAttachmentAdditions)
+    + (UNNotificationAttachment *) createFromImageData:(NSData*)imgData identifier:(NSString *)imageFileIdentifier options:(NSDictionary*)attachmentOptions;
+@end
+
+@implementation UNNotificationAttachment (UNNotificationAttachmentAdditions)
+    + (UNNotificationAttachment *) createFromImageData:(NSData*)imgData identifier:(NSString *)imageFileIdentifier options:(NSDictionary*)attachmentOptions {
+        NSFileManager *fileManager = [NSFileManager defaultManager];
+        NSString *tmpSubFolderName = [[NSProcessInfo processInfo] globallyUniqueString];
+        NSURL *tmpSubFolderURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:tmpSubFolderName] isDirectory:true];
+        NSError *error = nil;
+        [fileManager createDirectoryAtURL:tmpSubFolderURL withIntermediateDirectories:true attributes:nil error:&error];
+        if(error) {
+            NSLog(@"%@",[error localizedDescription]);
+            return nil;
+        }
+        NSURL *fileURL = [tmpSubFolderURL URLByAppendingPathComponent:imageFileIdentifier];
+        [imgData writeToURL:fileURL atomically:true];
+        UNNotificationAttachment *imageAttachment = [UNNotificationAttachment attachmentWithIdentifier:@"" URL:fileURL options:attachmentOptions error:&error];
+        if(error) {
+            NSLog(@"%@",[error localizedDescription]);
+            return nil;
+        }
+        return imageAttachment;
+
+    }
+@end
+
 NotificationsManager::NotificationsManager(QObject *parent): QObject(parent)
 {
 
@@ -42,14 +69,14 @@ NotificationsManager::objCxxPostNotification(const QString &room_name,
     content.threadIdentifier  = room_id.toNSString();
 
     if (!bodyImagePath.isEmpty()) {
-        NSError * _Nullable error;
-        NSURL *imageURL = [NSURL URLWithString:bodyImagePath.toNSString()];
-        NSArray* attachments = [NSMutableArray array];
-        UNNotificationAttachment *attachment = [UNNotificationAttachment attachmentWithIdentifier:@"" URL:imageURL options:nil error:&error];
-        if (error) {
-                NSLog(@"%@",[error localizedDescription]);
+        NSURL *imageURL = [NSURL fileURLWithPath:bodyImagePath.toNSString()];
+        NSData *img = [NSData dataWithContentsOfURL:imageURL];
+        NSArray *attachments = [NSMutableArray array];
+        UNNotificationAttachment *attachment = [UNNotificationAttachment createFromImageData:img identifier:@"attachment_image.jpeg" options:nil];
+        if (attachment) {
+            attachments = [NSMutableArray arrayWithObjects: attachment, nil];
+            content.attachments = attachments;
         }
-        content.attachments = [attachments arrayByAddingObject:attachment];
     }
 
     UNNotificationRequest *notificationRequest = [UNNotificationRequest requestWithIdentifier:event_id.toNSString() content:content trigger:nil];