diff --git a/src/js/controller/app/read.js b/src/js/controller/app/read.js index 3c7a926..0a24db2 100644 --- a/src/js/controller/app/read.js +++ b/src/js/controller/app/read.js @@ -53,8 +53,12 @@ var ReadCtrl = function($scope, $location, $q, email, invitation, outbox, pgp, k }; $scope.decrypt = function(message) { - return email.decryptBody({ - message: message + return $q(function(resolve) { + resolve(); + }).then(function() { + return email.decryptBody({ + message: message + }); }); }; diff --git a/src/js/directive/read.js b/src/js/directive/read.js index eb1c9ec..df16597 100644 --- a/src/js/directive/read.js +++ b/src/js/directive/read.js @@ -53,8 +53,7 @@ ngModule.directive('frameLoad', function($window) { if (open) { // trigger rendering of iframe // otherwise scale to fit would not compute correct dimensions on mobile - displayText(scope.state.mailList.selected ? scope.state.mailList.selected.body : undefined); - displayHtml(scope.state.mailList.selected ? scope.state.mailList.selected.html : undefined); + displayContent(); } }); @@ -84,60 +83,59 @@ ngModule.directive('frameLoad', function($window) { iframe.onload = function() { // set listeners - scope.$watch('state.mailList.selected.body', displayText); - scope.$watch('state.mailList.selected.html', displayHtml); + scope.$watch('state.mailList.selected.body', displayContent); + scope.$watch('state.mailList.selected.html', displayContent); // display initial message body scope.$apply(); }; - function displayText(body) { + function displayContent() { var mail = scope.state.mailList.selected; - if (mail && mail.encrypted && !mail.decrypted) { + if (!mail) { + return; + } + + if (mail.encrypted && !mail.decrypted) { // decrypt current mail - scope.decrypt(mail); - return; - } - - if (mail && mail.html) { + scope.decrypt(mail).then(function() { + if (scope.state.mailList.selected === mail && mail.decrypted) { + // decrypted mail is still selected, immidiately show body + displayContent(); + } + }); return; } resetWidth(); - // send text body for rendering in iframe - iframe.contentWindow.postMessage({ - text: body - }, '*'); - } + if (mail.html) { + // if there are image tags in the html? + var hasImages = /]+\bsrc=['"][^'">]+['"]/ig.test(mail.html); + scope.showImageButton = hasImages; - function displayHtml(html) { - if (!html) { - return; + iframe.contentWindow.postMessage({ + html: mail.html, + removeImages: hasImages // avoids doing unnecessary work on the html + }, '*'); + + // only add a scope function to reload the html if there are images + if (hasImages) { + // reload WITH images + scope.displayImages = function() { + scope.showImageButton = false; + iframe.contentWindow.postMessage({ + html: mail.html, + removeImages: false + }, '*'); + }; + } + } else if (mail.body) { + iframe.contentWindow.postMessage({ + text: mail.body + }, '*'); } - resetWidth(); - - // if there are image tags in the html? - var hasImages = /]+\bsrc=['"][^'">]+['"]/ig.test(html); - scope.showImageButton = hasImages; - - iframe.contentWindow.postMessage({ - html: html, - removeImages: hasImages // avoids doing unnecessary work on the html - }, '*'); - - // only add a scope function to reload the html if there are images - if (hasImages) { - // reload WITH images - scope.displayImages = function() { - scope.showImageButton = false; - iframe.contentWindow.postMessage({ - html: html, - removeImages: false - }, '*'); - }; - } } // reset the iframe width to the original (min-width:100%)