From 062f8d078e0658f3db9ea81883ee6a3a298b87ef Mon Sep 17 00:00:00 2001 From: djmaze Date: Tue, 15 Sep 2020 09:43:53 +0200 Subject: [PATCH] Message from, to, cc, bcc, replyTo and deliveredTo to the new EmailCollectionModel --- dev/Helper/Message.js | 67 ---------------------- dev/Model/EmailCollection.js | 51 +++++++++++++++++ dev/Model/Message.js | 106 ++++++++++++++++------------------- dev/Stores/User/Message.js | 4 +- 4 files changed, 100 insertions(+), 128 deletions(-) delete mode 100644 dev/Helper/Message.js create mode 100644 dev/Model/EmailCollection.js diff --git a/dev/Helper/Message.js b/dev/Helper/Message.js deleted file mode 100644 index 7cb7329b3..000000000 --- a/dev/Helper/Message.js +++ /dev/null @@ -1,67 +0,0 @@ -import { EmailModel } from 'Model/Email'; - -/** - * @param {Array.} emails - * @param {boolean=} friendlyView = false - * @param {boolean=} wrapWithLink = false - * @returns {string} - */ -export function emailArrayToString(emails, friendlyView = false, wrapWithLink = false) { - const result = []; - if (Array.isNotEmpty(emails)) { - emails.forEach(email => result.push(email.toLine(friendlyView, wrapWithLink))); - } - - return result.join(', '); -} - -/** - * @param {Array.} emails - * @returns {string} - */ -export function emailArrayToStringClear(emails) { - const result = []; - if (Array.isNotEmpty(emails)) { - emails.forEach(email => { - if (email && email.email && email.name) { - result.push(email.email); - } - }); - } - - return result.join(', '); -} - -/** - * @param {?Array} json - * @returns {Array.} - */ -export function emailArrayFromJson(json) { - const result = []; - if (Array.isNotEmpty(json)) { - json.forEach(email => { - email = EmailModel.newInstanceFromJson(email); - if (email) { - result.push(email); - } - }); - } - - return result; -} - -/** - * @param {Array.} inputEmails - * @param {Object} unic - * @param {Array} localEmails - */ -export function replyHelper(inputEmails, unic, localEmails) { - if (inputEmails) { - inputEmails.forEach(email => { - if (undefined === unic[email.email]) { - unic[email.email] = true; - localEmails.push(email); - } - }); - } -} diff --git a/dev/Model/EmailCollection.js b/dev/Model/EmailCollection.js new file mode 100644 index 000000000..2a6254223 --- /dev/null +++ b/dev/Model/EmailCollection.js @@ -0,0 +1,51 @@ +import { EmailModel } from 'Model/Email'; + +'use strict'; + +class EmailCollectionModel extends Array +{ + constructor() { + super(); + } + + /** + * @param {?Array} json + * @returns {Array.} + */ + static reviveFromJson(items) { + let result = new EmailCollectionModel; + if (Array.isArray(items)) { + items.forEach(email => { + email = EmailModel.newInstanceFromJson(email); + email && result.push(email); + }); + } + return result; + } + + /** + * @param {boolean=} friendlyView = false + * @param {boolean=} wrapWithLink = false + * @returns {string} + */ + toString(friendlyView = false, wrapWithLink = false) { + const result = []; + this.forEach(email => result.push(email.toLine(friendlyView, wrapWithLink))); + return result.join(', '); + } + + /** + * @returns {string} + */ + toStringClear() { + const result = []; + this.forEach(email => { + if (email && email.email && email.name) { + result.push(email.email); + } + }); + return result.join(', '); + } +} + +export { EmailCollectionModel, EmailCollectionModel as default }; diff --git a/dev/Model/Message.js b/dev/Model/Message.js index 6b8fbfc4e..725c52f2f 100644 --- a/dev/Model/Message.js +++ b/dev/Model/Message.js @@ -15,21 +15,27 @@ import { messageViewLink, messageDownloadLink } from 'Common/Links'; import FolderStore from 'Stores/User/Folder'; import PgpStore from 'Stores/User/Pgp'; -import { emailArrayFromJson, emailArrayToStringClear, emailArrayToString, replyHelper } from 'Helper/Message'; - import { AttachmentModel, staticCombinedIconClass } from 'Model/Attachment'; +import { EmailCollectionModel } from 'Model/EmailCollection'; import { AbstractModel } from 'Knoin/AbstractModel'; -const isArray = Array.isArray; +const isArray = Array.isArray, + + replyHelper = (emails, unic, localEmails) => { + emails.forEach(email => { + if (undefined === unic[email.email]) { + unic[email.email] = true; + localEmails.push(email); + } + }); + }; class MessageModel extends AbstractModel { constructor() { super('MessageModel'); - this.folderFullNameRaw = ''; - this.uid = ''; - this.hash = ''; - this.requestHash = ''; + this._reset(); + this.subject = ko.observable(''); this.subjectPrefix = ko.observable(''); this.subjectSuffix = ko.observable(''); @@ -37,8 +43,6 @@ class MessageModel extends AbstractModel { this.dateTimeStampInUTC = ko.observable(0); this.priority = ko.observable(MessagePriority.Normal); - this.proxy = false; - this.fromEmailString = ko.observable(''); this.fromClearEmailString = ko.observable(''); this.toEmailsString = ko.observable(''); @@ -47,16 +51,6 @@ class MessageModel extends AbstractModel { this.senderEmailsString = ko.observable(''); this.senderClearEmailsString = ko.observable(''); - this.emails = []; - - this.from = []; - this.to = []; - this.cc = []; - this.bcc = []; - this.replyTo = []; - this.deliveredTo = []; - this.unsubsribeLinks = []; - this.newForAnimation = ko.observable(false); this.deleted = ko.observable(false); @@ -77,8 +71,6 @@ class MessageModel extends AbstractModel { staticCombinedIconClass(this.hasAttachments() ? this.attachmentsSpecData() : []) ); - this.body = null; - this.isHtml = ko.observable(false); this.hasImages = ko.observable(false); this.attachments = ko.observableArray([]); @@ -91,11 +83,6 @@ class MessageModel extends AbstractModel { this.priority = ko.observable(MessagePriority.Normal); this.readReceipt = ko.observable(''); - this.aDraftInfo = []; - this.sMessageId = ''; - this.sInReplyTo = ''; - this.sReferences = ''; - this.hasUnseenSubMessage = ko.observable(false); this.hasFlaggedSubMessage = ko.observable(false); @@ -117,11 +104,29 @@ class MessageModel extends AbstractModel { return oMessageModel.initByJson(json) ? oMessageModel : null; } - clear() { + _reset() { this.folderFullNameRaw = ''; this.uid = ''; this.hash = ''; this.requestHash = ''; + this.proxy = false; + this.emails = []; + this.from = new EmailCollectionModel; + this.to = new EmailCollectionModel; + this.cc = new EmailCollectionModel; + this.bcc = new EmailCollectionModel; + this.replyTo = new EmailCollectionModel; + this.deliveredTo = new EmailCollectionModel; + this.unsubsribeLinks = []; + this.body = null; + this.aDraftInfo = []; + this.sMessageId = ''; + this.sInReplyTo = ''; + this.sReferences = ''; + } + + clear() { + this._reset(); this.subject(''); this.subjectPrefix(''); this.subjectSuffix(''); @@ -129,8 +134,6 @@ class MessageModel extends AbstractModel { this.dateTimeStampInUTC(0); this.priority(MessagePriority.Normal); - this.proxy = false; - this.fromEmailString(''); this.fromClearEmailString(''); this.toEmailsString(''); @@ -138,16 +141,6 @@ class MessageModel extends AbstractModel { this.senderEmailsString(''); this.senderClearEmailsString(''); - this.emails = []; - - this.from = []; - this.to = []; - this.cc = []; - this.bcc = []; - this.replyTo = []; - this.deliveredTo = []; - this.unsubsribeLinks = []; - this.newForAnimation(false); this.deleted(false); @@ -163,7 +156,6 @@ class MessageModel extends AbstractModel { this.hasAttachments(false); this.attachmentsSpecData([]); - this.body = null; this.isHtml(false); this.hasImages(false); this.attachments([]); @@ -175,10 +167,6 @@ class MessageModel extends AbstractModel { this.priority(MessagePriority.Normal); this.readReceipt(''); - this.aDraftInfo = []; - this.sMessageId = ''; - this.sInReplyTo = ''; - this.sReferences = ''; this.threads([]); @@ -250,12 +238,12 @@ class MessageModel extends AbstractModel { this.size(pInt(json.Size)); - this.from = emailArrayFromJson(json.From); - this.to = emailArrayFromJson(json.To); - this.cc = emailArrayFromJson(json.Cc); - this.bcc = emailArrayFromJson(json.Bcc); - this.replyTo = emailArrayFromJson(json.ReplyTo); - this.deliveredTo = emailArrayFromJson(json.DeliveredTo); + this.from = EmailCollectionModel.reviveFromJson(json.From); + this.to = EmailCollectionModel.reviveFromJson(json.To); + this.cc = EmailCollectionModel.reviveFromJson(json.Cc); + this.bcc = EmailCollectionModel.reviveFromJson(json.Bcc); + this.replyTo = EmailCollectionModel.reviveFromJson(json.ReplyTo); + this.deliveredTo = EmailCollectionModel.reviveFromJson(json.DeliveredTo); this.unsubsribeLinks = Array.isNotEmpty(json.UnsubsribeLinks) ? json.UnsubsribeLinks : []; this.subject(json.Subject); @@ -271,10 +259,10 @@ class MessageModel extends AbstractModel { this.hasAttachments(!!json.HasAttachments); this.attachmentsSpecData(isArray(json.AttachmentsSpecData) ? json.AttachmentsSpecData : []); - this.fromEmailString(emailArrayToString(this.from, true)); - this.fromClearEmailString(emailArrayToStringClear(this.from)); - this.toEmailsString(emailArrayToString(this.to, true)); - this.toClearEmailsString(emailArrayToStringClear(this.to)); + this.fromEmailString(this.from.toString(true)); + this.fromClearEmailString(this.from.toStringClear()); + this.toEmailsString(this.to.toString(true)); + this.toClearEmailsString(this.to.toStringClear()); this.threads(isArray(json.Threads) ? json.Threads : []); @@ -399,7 +387,7 @@ class MessageModel extends AbstractModel { * @returns {string} */ fromToLine(friendlyView, wrapWithLink = false) { - return emailArrayToString(this.from, friendlyView, wrapWithLink); + return this.from.toString(friendlyView, wrapWithLink); } /** @@ -420,7 +408,7 @@ class MessageModel extends AbstractModel { * @returns {string} */ toToLine(friendlyView, wrapWithLink = false) { - return emailArrayToString(this.to, friendlyView, wrapWithLink); + return this.to.toString(friendlyView, wrapWithLink); } /** @@ -429,7 +417,7 @@ class MessageModel extends AbstractModel { * @returns {string} */ ccToLine(friendlyView, wrapWithLink = false) { - return emailArrayToString(this.cc, friendlyView, wrapWithLink); + return this.cc.toString(friendlyView, wrapWithLink); } /** @@ -438,7 +426,7 @@ class MessageModel extends AbstractModel { * @returns {string} */ bccToLine(friendlyView, wrapWithLink = false) { - return emailArrayToString(this.bcc, friendlyView, wrapWithLink); + return this.bcc.toString(friendlyView, wrapWithLink); } /** @@ -447,7 +435,7 @@ class MessageModel extends AbstractModel { * @returns {string} */ replyToToLine(friendlyView, wrapWithLink = false) { - return emailArrayToString(this.replyTo, friendlyView, wrapWithLink); + return this.replyTo.toString(friendlyView, wrapWithLink); } /** diff --git a/dev/Stores/User/Message.js b/dev/Stores/User/Message.js index 0925e9194..ecb687a9f 100644 --- a/dev/Stores/User/Message.js +++ b/dev/Stores/User/Message.js @@ -27,7 +27,7 @@ import { MESSAGE_BODY_CACHE_LIMIT } from 'Common/Consts'; import { mailBox, notificationMailIcon } from 'Common/Links'; import { i18n, getNotification } from 'Common/Translator'; -import * as MessageHelper from 'Helper/Message'; +import { EmailCollectionModel } from 'Model/EmailCollection'; import { MessageModel } from 'Model/Message'; import { setHash } from 'Knoin/Knoin'; @@ -259,7 +259,7 @@ class MessageUserStore { newMessages.forEach(item => { NotificationStore.displayDesktopNotification( notificationMailIcon(), - MessageHelper.emailArrayToString(MessageHelper.emailArrayFromJson(item.From), false), + EmailCollectionModel.reviveFromJson(item.From).toString(), item.Subject, { 'Folder': item.Folder, 'Uid': item.Uid } );