From 16885f4ebfd4e40e602e5a712b4bf65491852094 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 29 Jul 2015 15:37:55 -0400 Subject: [PATCH] (fix) properly handle subparts compilation for message/rfc822 message parts --- UI/MailPartViewers/UIxMailPartMessageViewer.m | 46 +++++++++++++ .../UIxMailPartMessageViewer.wox | 66 ++++++++++--------- .../js/Mailer/Message.service.js | 1 + 3 files changed, 83 insertions(+), 30 deletions(-) diff --git a/UI/MailPartViewers/UIxMailPartMessageViewer.m b/UI/MailPartViewers/UIxMailPartMessageViewer.m index 7e18cb703..fefff10fd 100644 --- a/UI/MailPartViewers/UIxMailPartMessageViewer.m +++ b/UI/MailPartViewers/UIxMailPartMessageViewer.m @@ -31,6 +31,8 @@ #import #import "UIxMailRenderingContext.h" +#import + #import "UIxMailPartViewer.h" /* @@ -205,4 +207,48 @@ return [@"mailto:" stringByAppendingString:[_address baseEMail]]; } +- (id) renderedPart +{ + id info, viewer; + NSArray *parts; + NSMutableArray *renderedParts; + NSUInteger i, max; + + parts = [[self contentInfo] objectForKey: @"parts"]; + renderedParts = [NSMutableArray array]; + max = [parts count]; + + // Might get a multipart/* + if (max) + { + for (i = 0; i < max; i++) + { + info = [parts objectAtIndex: i]; + viewer = [[[self context] mailRenderingContext] viewerForBodyInfo: info]; + [viewer setBodyInfo: info]; + [viewer setPartPath: [[self contentPartPath] arrayByAddingObject: [NSString stringWithFormat: @"%d", i+1]]]; + [renderedParts addObject: [viewer renderedPart]]; + } + } + else + { + info = [self contentInfo]; + viewer = [[[self context] mailRenderingContext] viewerForBodyInfo: info]; + [viewer setBodyInfo: info]; + [viewer setPartPath: [self contentPartPath]]; + [renderedParts addObject: [viewer renderedPart]]; + } + + // We inject the output of our UIxMailPartMessageViewer template + // in order to pretty-format the parts following it. + info = [NSDictionary dictionaryWithObjectsAndKeys: @"text/plain", @"contentType", @"UIxMailPartTextViewer", @"type", + [[self generateResponse] contentAsString], @"content", nil]; + [renderedParts insertObject: info atIndex: 0]; + + return [NSDictionary dictionaryWithObjectsAndKeys: + [self className], @"type", + renderedParts, @"content", + nil]; +} + @end /* UIxMailPartMessageViewer */ diff --git a/UI/Templates/MailPartViewers/UIxMailPartMessageViewer.wox b/UI/Templates/MailPartViewers/UIxMailPartMessageViewer.wox index ee34f4e16..f9fb5b8d7 100644 --- a/UI/Templates/MailPartViewers/UIxMailPartMessageViewer.wox +++ b/UI/Templates/MailPartViewers/UIxMailPartMessageViewer.wox @@ -4,36 +4,42 @@ xmlns:var="http://www.skyrix.com/od/binding" xmlns:label="OGo:label" class="linked_attachment_frame"> -
-
- -
- : -
- : -
- : -
- : -
-
- - : - - -
+ +
+ +
+
- -
- -
- -
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ + +
+ +
+ +
+
+
+
diff --git a/UI/WebServerResources/js/Mailer/Message.service.js b/UI/WebServerResources/js/Mailer/Message.service.js index cbbdf8c67..0bc923c6b 100644 --- a/UI/WebServerResources/js/Mailer/Message.service.js +++ b/UI/WebServerResources/js/Mailer/Message.service.js @@ -179,6 +179,7 @@ return part.preferredPart == alternatePart.contentType; })); } + // Can be used for UIxMailPartMixedViewer and UIxMailPartMessageViewer else if (angular.isArray(part.content)) { _.each(part.content, function(mixedPart) { _visit(mixedPart);