mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Cleanup ComposePopupView class
This commit is contained in:
parent
81fbb80788
commit
fded75e3f4
1 changed files with 92 additions and 95 deletions
|
|
@ -62,6 +62,71 @@ const
|
||||||
return email.email || false;
|
return email.email || false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Array} aList
|
||||||
|
* @param {boolean} bFriendly
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
emailArrayToStringLineHelper = (aList, bFriendly) =>
|
||||||
|
aList.map(item => item.toLine(bFriendly)).join(', '),
|
||||||
|
|
||||||
|
reloadDraftFolder = () => {
|
||||||
|
const draftsFolder = FolderUserStore.draftsFolder();
|
||||||
|
if (draftsFolder && UNUSED_OPTION_VALUE !== draftsFolder) {
|
||||||
|
setFolderHash(draftsFolder, '');
|
||||||
|
if (FolderUserStore.currentFolderFullName() === draftsFolder) {
|
||||||
|
MessagelistUserStore.reload(true);
|
||||||
|
} else {
|
||||||
|
rl.app.folderInformation(draftsFolder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
findIdentityByMessage = (composeType, message) => {
|
||||||
|
let resultIdentity = null;
|
||||||
|
const find = addresses => {
|
||||||
|
addresses = addresses.map(item => item.email);
|
||||||
|
return IdentityUserStore.find(item => addresses.includes(item.email()));
|
||||||
|
};
|
||||||
|
|
||||||
|
if (message) {
|
||||||
|
switch (composeType) {
|
||||||
|
case ComposeType.Reply:
|
||||||
|
case ComposeType.ReplyAll:
|
||||||
|
case ComposeType.Forward:
|
||||||
|
case ComposeType.ForwardAsAttachment:
|
||||||
|
resultIdentity = find(message.to.concat(message.cc, message.bcc))/* || find(message.deliveredTo)*/;
|
||||||
|
break;
|
||||||
|
case ComposeType.Draft:
|
||||||
|
resultIdentity = find(message.from.concat(message.replyTo));
|
||||||
|
break;
|
||||||
|
// no default
|
||||||
|
// case ComposeType.Empty:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultIdentity || IdentityUserStore()[0] || null;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Function} fKoValue
|
||||||
|
* @param {Array} emails
|
||||||
|
*/
|
||||||
|
addEmailsTo = (fKoValue, emails) => {
|
||||||
|
if (arrayLength(emails)) {
|
||||||
|
const value = fKoValue().trim(),
|
||||||
|
values = emails.map(item => item ? item.toLine() : null)
|
||||||
|
.validUnique();
|
||||||
|
|
||||||
|
fKoValue(value + (value ? ', ' : '') + values.join(', ').trim());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
isPlainEditor = () => {
|
||||||
|
let type = SettingsUserStore.editorDefaultType();
|
||||||
|
return EditorDefaultType.Html !== type && EditorDefaultType.HtmlForced !== type;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} prefix
|
* @param {string} prefix
|
||||||
* @param {string} subject
|
* @param {string} subject
|
||||||
|
|
@ -550,7 +615,7 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
}
|
}
|
||||||
setFolderHash(this.draftsFolder(), '');
|
setFolderHash(this.draftsFolder(), '');
|
||||||
setFolderHash(sSentFolder, '');
|
setFolderHash(sSentFolder, '');
|
||||||
this.reloadDraftFolder();
|
reloadDraftFolder();
|
||||||
},
|
},
|
||||||
params,
|
params,
|
||||||
30000
|
30000
|
||||||
|
|
@ -612,7 +677,7 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
this.savedErrorDesc(getNotification(Notification.CantSaveMessage));
|
this.savedErrorDesc(getNotification(Notification.CantSaveMessage));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.reloadDraftFolder();
|
reloadDraftFolder();
|
||||||
},
|
},
|
||||||
params,
|
params,
|
||||||
200000
|
200000
|
||||||
|
|
@ -710,44 +775,6 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
reloadDraftFolder() {
|
|
||||||
const draftsFolder = FolderUserStore.draftsFolder();
|
|
||||||
if (draftsFolder && UNUSED_OPTION_VALUE !== draftsFolder) {
|
|
||||||
setFolderHash(draftsFolder, '');
|
|
||||||
if (FolderUserStore.currentFolderFullName() === draftsFolder) {
|
|
||||||
MessagelistUserStore.reload(true);
|
|
||||||
} else {
|
|
||||||
rl.app.folderInformation(draftsFolder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
findIdentityByMessage(composeType, message) {
|
|
||||||
let resultIdentity = null;
|
|
||||||
const find = addresses => {
|
|
||||||
addresses = addresses.map(item => item.email);
|
|
||||||
return IdentityUserStore.find(item => addresses.includes(item.email()));
|
|
||||||
};
|
|
||||||
|
|
||||||
if (message) {
|
|
||||||
switch (composeType) {
|
|
||||||
case ComposeType.Reply:
|
|
||||||
case ComposeType.ReplyAll:
|
|
||||||
case ComposeType.Forward:
|
|
||||||
case ComposeType.ForwardAsAttachment:
|
|
||||||
resultIdentity = find(message.to.concat(message.cc, message.bcc))/* || find(message.deliveredTo)*/;
|
|
||||||
break;
|
|
||||||
case ComposeType.Draft:
|
|
||||||
resultIdentity = find(message.from.concat(message.replyTo));
|
|
||||||
break;
|
|
||||||
// no default
|
|
||||||
// case ComposeType.Empty:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return resultIdentity || IdentityUserStore()[0] || null;
|
|
||||||
}
|
|
||||||
|
|
||||||
selectIdentity(identity) {
|
selectIdentity(identity) {
|
||||||
identity = identity && identity.item;
|
identity = identity && identity.item;
|
||||||
if (identity) {
|
if (identity) {
|
||||||
|
|
@ -800,7 +827,7 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
this.editor(editor => {
|
this.editor(editor => {
|
||||||
let signature = identity.signature() || '',
|
let signature = identity.signature() || '',
|
||||||
isHtml = ':HTML:' === signature.slice(0, 6),
|
isHtml = ':HTML:' === signature.slice(0, 6),
|
||||||
fromLine = this.oLastMessage ? this.emailArrayToStringLineHelper(this.oLastMessage.from, true) : '';
|
fromLine = this.oLastMessage ? emailArrayToStringLineHelper(this.oLastMessage.from, true) : '';
|
||||||
if (fromLine) {
|
if (fromLine) {
|
||||||
signature = signature.replace(/{{FROM-FULL}}/g, fromLine);
|
signature = signature.replace(/{{FROM-FULL}}/g, fromLine);
|
||||||
if (!fromLine.includes(' ') && 0 < fromLine.indexOf('@')) {
|
if (!fromLine.includes(' ') && 0 < fromLine.indexOf('@')) {
|
||||||
|
|
@ -846,9 +873,9 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
false
|
false
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
this.addEmailsTo(this.to, aToEmails);
|
addEmailsTo(this.to, aToEmails);
|
||||||
this.addEmailsTo(this.cc, aCcEmails);
|
addEmailsTo(this.cc, aCcEmails);
|
||||||
this.addEmailsTo(this.bcc, aBccEmails);
|
addEmailsTo(this.bcc, aBccEmails);
|
||||||
|
|
||||||
if (sCustomSubject && !this.subject()) {
|
if (sCustomSubject && !this.subject()) {
|
||||||
this.subject(sCustomSubject);
|
this.subject(sCustomSubject);
|
||||||
|
|
@ -863,36 +890,6 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
// alreadyFullscreen || (ThemeStore.isMobile() && toggleFullscreen());
|
// alreadyFullscreen || (ThemeStore.isMobile() && toggleFullscreen());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {Function} fKoValue
|
|
||||||
* @param {Array} emails
|
|
||||||
*/
|
|
||||||
addEmailsTo(fKoValue, emails) {
|
|
||||||
if (arrayLength(emails)) {
|
|
||||||
const value = fKoValue().trim(),
|
|
||||||
values = emails.map(item => item ? item.toLine() : null)
|
|
||||||
.validUnique();
|
|
||||||
|
|
||||||
fKoValue(value + (value ? ', ' : '') + values.join(', ').trim());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param {Array} aList
|
|
||||||
* @param {boolean} bFriendly
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
emailArrayToStringLineHelper(aList, bFriendly) {
|
|
||||||
bFriendly = !!bFriendly;
|
|
||||||
return aList.map(item => item.toLine(bFriendly)).join(', ');
|
|
||||||
}
|
|
||||||
|
|
||||||
isPlainEditor() {
|
|
||||||
let type = SettingsUserStore.editorDefaultType();
|
|
||||||
return EditorDefaultType.Html !== type && EditorDefaultType.HtmlForced !== type;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string=} sType = ComposeType.Empty
|
* @param {string=} sType = ComposeType.Empty
|
||||||
* @param {?MessageModel|Array=} oMessageOrArray = null
|
* @param {?MessageModel|Array=} oMessageOrArray = null
|
||||||
|
|
@ -935,21 +932,21 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
|
|
||||||
this.reset();
|
this.reset();
|
||||||
|
|
||||||
identity = this.findIdentityByMessage(lineComposeType, message);
|
identity = findIdentityByMessage(lineComposeType, message);
|
||||||
if (identity) {
|
if (identity) {
|
||||||
excludeEmail[identity.email()] = true;
|
excludeEmail[identity.email()] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arrayLength(aToEmails)) {
|
if (arrayLength(aToEmails)) {
|
||||||
this.to(this.emailArrayToStringLineHelper(aToEmails));
|
this.to(emailArrayToStringLineHelper(aToEmails));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arrayLength(aCcEmails)) {
|
if (arrayLength(aCcEmails)) {
|
||||||
this.cc(this.emailArrayToStringLineHelper(aCcEmails));
|
this.cc(emailArrayToStringLineHelper(aCcEmails));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arrayLength(aBccEmails)) {
|
if (arrayLength(aBccEmails)) {
|
||||||
this.bcc(this.emailArrayToStringLineHelper(aBccEmails));
|
this.bcc(emailArrayToStringLineHelper(aBccEmails));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lineComposeType && message) {
|
if (lineComposeType && message) {
|
||||||
|
|
@ -957,13 +954,12 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
sSubject = message.subject();
|
sSubject = message.subject();
|
||||||
aDraftInfo = message.aDraftInfo;
|
aDraftInfo = message.aDraftInfo;
|
||||||
|
|
||||||
let resplyAllParts = null;
|
|
||||||
switch (lineComposeType) {
|
switch (lineComposeType) {
|
||||||
case ComposeType.Empty:
|
case ComposeType.Empty:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ComposeType.Reply:
|
case ComposeType.Reply:
|
||||||
this.to(this.emailArrayToStringLineHelper(message.replyEmails(excludeEmail)));
|
this.to(emailArrayToStringLineHelper(message.replyEmails(excludeEmail)));
|
||||||
this.subject(replySubjectAdd('Re', sSubject));
|
this.subject(replySubjectAdd('Re', sSubject));
|
||||||
this.prepareMessageAttachments(message, lineComposeType);
|
this.prepareMessageAttachments(message, lineComposeType);
|
||||||
this.aDraftInfo = ['reply', message.uid, message.folder];
|
this.aDraftInfo = ['reply', message.uid, message.folder];
|
||||||
|
|
@ -971,16 +967,17 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
this.sReferences = (this.sInReplyTo + ' ' + message.sReferences).trim();
|
this.sReferences = (this.sInReplyTo + ' ' + message.sReferences).trim();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ComposeType.ReplyAll:
|
case ComposeType.ReplyAll: {
|
||||||
resplyAllParts = message.replyAllEmails(excludeEmail);
|
let parts = message.replyAllEmails(excludeEmail);
|
||||||
this.to(this.emailArrayToStringLineHelper(resplyAllParts[0]));
|
this.to(emailArrayToStringLineHelper(parts[0]));
|
||||||
this.cc(this.emailArrayToStringLineHelper(resplyAllParts[1]));
|
this.cc(emailArrayToStringLineHelper(parts[1]));
|
||||||
this.subject(replySubjectAdd('Re', sSubject));
|
this.subject(replySubjectAdd('Re', sSubject));
|
||||||
this.prepareMessageAttachments(message, lineComposeType);
|
this.prepareMessageAttachments(message, lineComposeType);
|
||||||
this.aDraftInfo = ['reply', message.uid, message.folder];
|
this.aDraftInfo = ['reply', message.uid, message.folder];
|
||||||
this.sInReplyTo = message.sMessageId;
|
this.sInReplyTo = message.sMessageId;
|
||||||
this.sReferences = (this.sInReplyTo + ' ' + message.references).trim();
|
this.sReferences = (this.sInReplyTo + ' ' + message.references).trim();
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case ComposeType.Forward:
|
case ComposeType.Forward:
|
||||||
this.subject(replySubjectAdd('Fwd', sSubject));
|
this.subject(replySubjectAdd('Fwd', sSubject));
|
||||||
|
|
@ -999,10 +996,10 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ComposeType.Draft:
|
case ComposeType.Draft:
|
||||||
this.to(this.emailArrayToStringLineHelper(message.to));
|
this.to(emailArrayToStringLineHelper(message.to));
|
||||||
this.cc(this.emailArrayToStringLineHelper(message.cc));
|
this.cc(emailArrayToStringLineHelper(message.cc));
|
||||||
this.bcc(this.emailArrayToStringLineHelper(message.bcc));
|
this.bcc(emailArrayToStringLineHelper(message.bcc));
|
||||||
this.replyTo(this.emailArrayToStringLineHelper(message.replyTo));
|
this.replyTo(emailArrayToStringLineHelper(message.replyTo));
|
||||||
|
|
||||||
this.bFromDraft = true;
|
this.bFromDraft = true;
|
||||||
|
|
||||||
|
|
@ -1018,10 +1015,10 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ComposeType.EditAsNew:
|
case ComposeType.EditAsNew:
|
||||||
this.to(this.emailArrayToStringLineHelper(message.to));
|
this.to(emailArrayToStringLineHelper(message.to));
|
||||||
this.cc(this.emailArrayToStringLineHelper(message.cc));
|
this.cc(emailArrayToStringLineHelper(message.cc));
|
||||||
this.bcc(this.emailArrayToStringLineHelper(message.bcc));
|
this.bcc(emailArrayToStringLineHelper(message.bcc));
|
||||||
this.replyTo(this.emailArrayToStringLineHelper(message.replyTo));
|
this.replyTo(emailArrayToStringLineHelper(message.replyTo));
|
||||||
|
|
||||||
this.subject(sSubject);
|
this.subject(sSubject);
|
||||||
this.prepareMessageAttachments(message, lineComposeType);
|
this.prepareMessageAttachments(message, lineComposeType);
|
||||||
|
|
@ -1104,7 +1101,7 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
this.editor(editor => {
|
this.editor(editor => {
|
||||||
editor.setHtml(sText);
|
editor.setHtml(sText);
|
||||||
|
|
||||||
if (this.isPlainEditor()) {
|
if (isPlainEditor()) {
|
||||||
editor.modePlain();
|
editor.modePlain();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1118,7 +1115,7 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
oMessageOrArray.forEach(item => this.addMessageAsAttachment(item));
|
oMessageOrArray.forEach(item => this.addMessageAsAttachment(item));
|
||||||
|
|
||||||
this.editor(editor => {
|
this.editor(editor => {
|
||||||
if (this.isPlainEditor()) {
|
if (isPlainEditor()) {
|
||||||
editor.setPlain('')
|
editor.setPlain('')
|
||||||
} else {
|
} else {
|
||||||
editor.setHtml('');
|
editor.setHtml('');
|
||||||
|
|
@ -1335,7 +1332,7 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
this.editor(editor => editor[this.isPlainEditor()?'modePlain':'modeWysiwyg']());
|
this.editor(editor => editor[isPlainEditor()?'modePlain':'modeWysiwyg']());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue