From 5e1cc87aea4403e7ac74143e2ecdfb608e9c9631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesu=CC=81s=20A=2E=20A=CC=81lvarez?= Date: Mon, 3 Dec 2018 11:06:21 +0100 Subject: [PATCH 1/2] parse data: URLs when creating attachments --- BodymovinQL/BodymovinPreview.m | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/BodymovinQL/BodymovinPreview.m b/BodymovinQL/BodymovinPreview.m index a5add8b..aa37a0f 100644 --- a/BodymovinQL/BodymovinPreview.m +++ b/BodymovinQL/BodymovinPreview.m @@ -92,7 +92,15 @@ - (NSDictionary *) previewProperties { //append animation assets if (attachmentsCount > 1) { for (NSString *assetsFile in _assets) { - attach(_fileURL, attachments, [self mimeTypeForFileAtPath:assetsFile], assetsFile); + if ([assetsFile hasPrefix:@"data:"]) { + NSRange semicolonRange = [assetsFile rangeOfString:@";"]; + NSString *type = [assetsFile substringWithRange:NSMakeRange(5, semicolonRange.location-5)]; + NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:assetsFile]]; + NSDictionary* attachment = [NSMutableDictionary dictionaryWithObjectsAndKeys:type, (NSString *)kQLPreviewPropertyMIMETypeKey, data, (NSString *)kQLPreviewPropertyAttachmentDataKey, nil]; + [attachments setObject:attachment forKey:assetsFile]; + } else { + attach(_fileURL, attachments, [self mimeTypeForFileAtPath:assetsFile], assetsFile); + } } } From 00d48911e9d50433d5d29c877bcd75857ba54860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesu=CC=81s=20A=2E=20A=CC=81lvarez?= Date: Mon, 3 Dec 2018 11:35:36 +0100 Subject: [PATCH 2/2] check for errors when parsing data URLs --- BodymovinQL/BodymovinPreview.m | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/BodymovinQL/BodymovinPreview.m b/BodymovinQL/BodymovinPreview.m index aa37a0f..3375766 100644 --- a/BodymovinQL/BodymovinPreview.m +++ b/BodymovinQL/BodymovinPreview.m @@ -92,15 +92,10 @@ - (NSDictionary *) previewProperties { //append animation assets if (attachmentsCount > 1) { for (NSString *assetsFile in _assets) { - if ([assetsFile hasPrefix:@"data:"]) { - NSRange semicolonRange = [assetsFile rangeOfString:@";"]; - NSString *type = [assetsFile substringWithRange:NSMakeRange(5, semicolonRange.location-5)]; - NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:assetsFile]]; - NSDictionary* attachment = [NSMutableDictionary dictionaryWithObjectsAndKeys:type, (NSString *)kQLPreviewPropertyMIMETypeKey, data, (NSString *)kQLPreviewPropertyAttachmentDataKey, nil]; - [attachments setObject:attachment forKey:assetsFile]; - } else { - attach(_fileURL, attachments, [self mimeTypeForFileAtPath:assetsFile], assetsFile); + if ([assetsFile hasPrefix:@"data:"] && attachData(assetsFile, attachments)) { + continue; } + attach(_fileURL, attachments, [self mimeTypeForFileAtPath:assetsFile], assetsFile); } } @@ -126,4 +121,16 @@ static void attach(NSURL *attachURL, NSMutableDictionary* attachments, NSString* NSDictionary* attachment = [NSMutableDictionary dictionaryWithObjectsAndKeys:type, (NSString *)kQLPreviewPropertyMIMETypeKey, data, (NSString *)kQLPreviewPropertyAttachmentDataKey, nil]; [attachments setObject:attachment forKey:fileName]; } + +static BOOL attachData(NSString *dataURL, NSMutableDictionary* attachments) +{ + NSRange semicolonRange = [dataURL rangeOfString:@";"]; + NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:dataURL]]; + if (semicolonRange.location == NSNotFound || data == nil) + return NO; + NSString *type = [dataURL substringWithRange:NSMakeRange(5, semicolonRange.location-5)]; + NSDictionary* attachment = [NSMutableDictionary dictionaryWithObjectsAndKeys:type, (NSString *)kQLPreviewPropertyMIMETypeKey, data, (NSString *)kQLPreviewPropertyAttachmentDataKey, nil]; + [attachments setObject:attachment forKey:dataURL]; + return YES; +} @end