mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-01-01 04:22:15 +08:00
Message from, to, cc, bcc, replyTo and deliveredTo to the new EmailCollectionModel
This commit is contained in:
parent
b904eca98e
commit
062f8d078e
4 changed files with 100 additions and 128 deletions
|
@ -1,67 +0,0 @@
|
|||
import { EmailModel } from 'Model/Email';
|
||||
|
||||
/**
|
||||
* @param {Array.<EmailModel>} 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.<EmailModel>} 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.<EmailModel>}
|
||||
*/
|
||||
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.<EmailModel>} 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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
51
dev/Model/EmailCollection.js
Normal file
51
dev/Model/EmailCollection.js
Normal file
|
@ -0,0 +1,51 @@
|
|||
import { EmailModel } from 'Model/Email';
|
||||
|
||||
'use strict';
|
||||
|
||||
class EmailCollectionModel extends Array
|
||||
{
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {?Array} json
|
||||
* @returns {Array.<EmailModel>}
|
||||
*/
|
||||
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 };
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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 }
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue