diff --git a/dev/Common/Selector.js b/dev/Common/Selector.js index be7ed462c..623da8d3f 100644 --- a/dev/Common/Selector.js +++ b/dev/Common/Selector.js @@ -778,10 +778,7 @@ if (bClick) { - this.focusedItem(oItem); - this.selectedItem(oItem); - - this.scrollToFocused(); + this.selectMessageItem(oItem); } } }; @@ -791,6 +788,14 @@ this.oCallbacks[sEventName] = fCallback; }; + Selector.prototype.selectMessageItem = function (oMessageItem) + { + this.focusedItem(oMessageItem); + this.selectedItem(oMessageItem); + + this.scrollToFocused(); + }; + module.exports = Selector; }()); \ No newline at end of file diff --git a/dev/Model/Message.js b/dev/Model/Message.js index 87fc7036c..32eda9cf1 100644 --- a/dev/Model/Message.js +++ b/dev/Model/Message.js @@ -781,47 +781,55 @@ */ MessageModel.prototype.populateByMessageListItem = function (oMessage) { - this.folderFullNameRaw = oMessage.folderFullNameRaw; - this.uid = oMessage.uid; - this.hash = oMessage.hash; - this.requestHash = oMessage.requestHash; - this.subject(oMessage.subject()); + if (oMessage) + { + this.folderFullNameRaw = oMessage.folderFullNameRaw; + this.uid = oMessage.uid; + this.hash = oMessage.hash; + this.requestHash = oMessage.requestHash; + this.subject(oMessage.subject()); + } + this.subjectPrefix(this.subjectPrefix()); this.subjectSuffix(this.subjectSuffix()); - this.size(oMessage.size()); - this.dateTimeStampInUTC(oMessage.dateTimeStampInUTC()); - this.priority(oMessage.priority()); + if (oMessage) + { - this.proxy = oMessage.proxy; + this.size(oMessage.size()); + this.dateTimeStampInUTC(oMessage.dateTimeStampInUTC()); + this.priority(oMessage.priority()); - this.fromEmailString(oMessage.fromEmailString()); - this.fromClearEmailString(oMessage.fromClearEmailString()); - this.toEmailsString(oMessage.toEmailsString()); - this.toClearEmailsString(oMessage.toClearEmailsString()); + this.proxy = oMessage.proxy; - this.emails = oMessage.emails; + this.fromEmailString(oMessage.fromEmailString()); + this.fromClearEmailString(oMessage.fromClearEmailString()); + this.toEmailsString(oMessage.toEmailsString()); + this.toClearEmailsString(oMessage.toClearEmailsString()); - this.from = oMessage.from; - this.to = oMessage.to; - this.cc = oMessage.cc; - this.bcc = oMessage.bcc; - this.replyTo = oMessage.replyTo; - this.deliveredTo = oMessage.deliveredTo; + this.emails = oMessage.emails; - this.unseen(oMessage.unseen()); - this.flagged(oMessage.flagged()); - this.answered(oMessage.answered()); - this.forwarded(oMessage.forwarded()); - this.isReadReceipt(oMessage.isReadReceipt()); - this.deletedMark(oMessage.deletedMark()); + this.from = oMessage.from; + this.to = oMessage.to; + this.cc = oMessage.cc; + this.bcc = oMessage.bcc; + this.replyTo = oMessage.replyTo; + this.deliveredTo = oMessage.deliveredTo; - this.priority(oMessage.priority()); + this.unseen(oMessage.unseen()); + this.flagged(oMessage.flagged()); + this.answered(oMessage.answered()); + this.forwarded(oMessage.forwarded()); + this.isReadReceipt(oMessage.isReadReceipt()); + this.deletedMark(oMessage.deletedMark()); - this.selected(oMessage.selected()); - this.checked(oMessage.checked()); - this.hasAttachments(oMessage.hasAttachments()); - this.attachmentsSpecData(oMessage.attachmentsSpecData()); + this.priority(oMessage.priority()); + + this.selected(oMessage.selected()); + this.checked(oMessage.checked()); + this.hasAttachments(oMessage.hasAttachments()); + this.attachmentsSpecData(oMessage.attachmentsSpecData()); + } this.body = null; @@ -830,7 +838,10 @@ this.sInReplyTo = ''; this.sReferences = ''; - this.threads(oMessage.threads()); + if (oMessage) + { + this.threads(oMessage.threads()); + } this.computeSenderEmail(); diff --git a/dev/Stores/User/Message.js b/dev/Stores/User/Message.js index df2be5ecf..718ba6310 100644 --- a/dev/Stores/User/Message.js +++ b/dev/Stores/User/Message.js @@ -279,7 +279,8 @@ require('Stores/User/Account').email(), Translator.i18n('MESSAGE_LIST/NEW_MESSAGE_NOTIFICATION', { 'COUNT': iLen - }) + }), + {'Folder': '', 'Uid': ''} ); } else @@ -290,7 +291,11 @@ Links.notificationMailIcon(), MessageHelper.emailArrayToString( MessageHelper.emailArrayFromJson(aNewMessages[iIndex].From), false), - aNewMessages[iIndex].Subject + aNewMessages[iIndex].Subject, + { + 'Folder': aNewMessages[iIndex].Folder, + 'Uid': aNewMessages[iIndex].Uid + } ); } } @@ -744,6 +749,24 @@ } }; + MessageUserStore.prototype.selectMessageByFolderAndUid = function (sFolder, sUid) + { + if (sFolder && sUid) + { + window.console.log(sFolder, sUid); + + this.message(this.staticMessage.populateByMessageListItem(null)); + this.message().folderFullNameRaw = sFolder; + this.message().uid = sUid; + + this.populateMessageBody(this.message()); + } + else + { + this.message(null); + } + }; + MessageUserStore.prototype.populateMessageBody = function (oMessage) { if (oMessage) diff --git a/dev/Stores/User/Notification.js b/dev/Stores/User/Notification.js index e17e10821..fb8412e92 100644 --- a/dev/Stores/User/Notification.js +++ b/dev/Stores/User/Notification.js @@ -8,6 +8,7 @@ ko = require('ko'), Enums = require('Common/Enums'), + Events = require('Common/Events'), Audio = require('Common/Audio'), Settings = require('Storage/Settings') @@ -161,7 +162,7 @@ } }; - NotificationUserStore.prototype.displayDesktopNotification = function (sImageSrc, sTitle, sText) + NotificationUserStore.prototype.displayDesktopNotification = function (sImageSrc, sTitle, sText, oMessageData) { if (this.enableDesktopNotification()) { @@ -180,6 +181,19 @@ oNotification.show(); } + if (oMessageData) + { + oNotification.onclick = function () { + + window.focus(); + + if (oMessageData.Folder && oMessageData.Uid) + { + Events.pub('mailbox.message.show', [oMessageData.Folder, oMessageData.Uid]); + } + }; + } + window.setTimeout((function (oLocalNotifications) { return function () { if (oLocalNotifications.cancel) diff --git a/dev/View/User/MailBox/MessageList.js b/dev/View/User/MailBox/MessageList.js index aae4ab7ba..cc67227a8 100644 --- a/dev/View/User/MailBox/MessageList.js +++ b/dev/View/User/MailBox/MessageList.js @@ -292,6 +292,35 @@ }, this) ; + Events + .sub('mailbox.message.show', function (sFolder, sUid) { + + var oMessage = _.find(this.messageList(), function (oItem) { + return oItem && sFolder === oItem.folderFullNameRaw && sUid === oItem.uid; + }); + + if ('INBOX' === sFolder) + { + kn.setHash(Links.mailBox(sFolder, 1)); + } + + if (oMessage) + { + this.selector.selectMessageItem(oMessage); + } + else + { + if ('INBOX' !== sFolder) + { + kn.setHash(Links.mailBox(sFolder, 1)); + } + + MessageStore.selectMessageByFolderAndUid(sFolder, sUid); + } + + }, this) + ; + MessageStore.messageListEndHash.subscribe(function () { this.selector.scrollToTop(); }, this);