diff --git a/dev/Stores/User/GnuPG.js b/dev/Stores/User/GnuPG.js index 621da958a..0376ac379 100644 --- a/dev/Stores/User/GnuPG.js +++ b/dev/Stores/User/GnuPG.js @@ -133,13 +133,13 @@ export const GnuPGUserStore = new class { /** * Checks if verifying/encrypting a message is possible with given email addresses. */ - hasPublicKeyForEmails(recipients, all) { + hasPublicKeyForEmails(recipients) { const count = recipients.length, length = count ? recipients.filter(email => // (key.can_verify || key.can_encrypt) && this.publicKeys.find(key => key.emails.includes(email)) ).length : 0; - return length && (!all || length === count); + return length && length === count; } getPrivateKeyFor(query, sign) { diff --git a/dev/Stores/User/OpenPGP.js b/dev/Stores/User/OpenPGP.js index 8f4f8fb78..bc67b7dc5 100644 --- a/dev/Stores/User/OpenPGP.js +++ b/dev/Stores/User/OpenPGP.js @@ -145,12 +145,12 @@ export const OpenPGPUserStore = new class { /** * Checks if verifying/encrypting a message is possible with given email addresses. */ - hasPublicKeyForEmails(recipients, all) { + hasPublicKeyForEmails(recipients) { const count = recipients.length, length = count ? recipients.filter(email => this.publicKeys().find(key => key.emails.includes(email)) ).length : 0; - return length && (!all || length === count); + return length && length === count; } getPrivateKeyFor(query/*, sign*/) { diff --git a/dev/Stores/User/Pgp.js b/dev/Stores/User/Pgp.js index 0d4489e4d..8873ede20 100644 --- a/dev/Stores/User/Pgp.js +++ b/dev/Stores/User/Pgp.js @@ -74,33 +74,28 @@ export const PgpUserStore = new class { return 0 === text.trim().indexOf('-----BEGIN PGP MESSAGE-----'); } - async mailvelopeHasPublicKeyForEmails(recipients, all) { + async mailvelopeHasPublicKeyForEmails(recipients) { const keyring = this.mailvelopeKeyring, mailvelope = keyring && await keyring.validKeyForAddress(recipients) /*.then(LookupResult => Object.entries(LookupResult))*/, entries = mailvelope && Object.entries(mailvelope); - return !!(entries && (all ? (entries.filter(value => value[1]).length === recipients.length) : entries.length)); + return entries && entries.filter(value => value[1]).length === recipients.length; } /** * Checks if verifying/encrypting a message is possible with given email addresses. * Returns the first library that can. */ - async hasPublicKeyForEmails(recipients, all) { + async hasPublicKeyForEmails(recipients) { const count = recipients.length; if (count) { - if (OpenPGPUserStore.hasPublicKeyForEmails(recipients, all)) { + if (OpenPGPUserStore.hasPublicKeyForEmails(recipients)) { return 'openpgp'; } - - if (GnuPGUserStore.hasPublicKeyForEmails(recipients, all)) { + if (GnuPGUserStore.hasPublicKeyForEmails(recipients)) { return 'gnupg'; } - - if (await this.mailvelopeHasPublicKeyForEmails(recipients, all)) { - return 'mailvelope'; - } } return false; } diff --git a/dev/Styles/User/Compose.less b/dev/Styles/User/Compose.less index 06fe38946..40b1774a7 100644 --- a/dev/Styles/User/Compose.less +++ b/dev/Styles/User/Compose.less @@ -113,10 +113,6 @@ } } - > div { - line-height: 30px; - } - textarea, input[type="text"] { width: 100%; } diff --git a/dev/View/Popup/Compose.js b/dev/View/Popup/Compose.js index 69b8d749c..a572d40af 100644 --- a/dev/View/Popup/Compose.js +++ b/dev/View/Popup/Compose.js @@ -134,8 +134,6 @@ class ComposePopupView extends AbstractViewPopup { this.bSkipNextHide = false; - this.capaOpenPGP = PgpUserStore.isSupported(); - this.addObservables({ identitiesDropdownTrigger: false, @@ -183,8 +181,6 @@ class ComposePopupView extends AbstractViewPopup { viewArea: 'body', - composeUploaderButton: null, // initDom - composeUploaderDropPlace: null, // initDom attacheMultipleAllowed: false, addAttachmentEnabled: false, @@ -283,7 +279,10 @@ class ComposePopupView extends AbstractViewPopup { currentIdentity: value => { this.canPgpSign(false); value && PgpUserStore.getKeyForSigning(value.email()).then(result => { - console.log({canPgpSign:result}); + console.log({ + email: value.email(), + canPgpSign:result + }); this.canPgpSign(result) }); }, @@ -1120,126 +1119,123 @@ class ComposePopupView extends AbstractViewPopup { } } - onBuild() { + onBuild(dom) { // initUploader + const oJua = new Jua({ + action: serverRequest('Upload'), + clickElement: dom.querySelector('#composeUploadButton'), + dragAndDropElement: dom.querySelector('.b-attachment-place') + }), + uploadCache = {}, + attachmentSizeLimit = pInt(SettingsGet('AttachmentLimit')); - if (this.composeUploaderButton()) { - const oJua = new Jua({ - action: serverRequest('Upload'), - clickElement: this.composeUploaderButton(), - dragAndDropElement: this.composeUploaderDropPlace() - }), - uploadCache = {}, - attachmentSizeLimit = pInt(SettingsGet('AttachmentLimit')); - - oJua - // .on('onLimitReached', (limit) => { - // alert(limit); - // }) - .on('onDragEnter', () => { - this.dragAndDropOver(true); - }) - .on('onDragLeave', () => { - this.dragAndDropOver(false); - }) - .on('onBodyDragEnter', () => { - this.attachmentsArea(); - this.dragAndDropVisible(true); - }) - .on('onBodyDragLeave', () => { - this.dragAndDropVisible(false); - }) - .on('onProgress', (id, loaded, total) => { - let item = uploadCache[id]; - if (!item) { - item = this.getAttachmentById(id); - if (item) { - uploadCache[id] = item; - } - } - + oJua + // .on('onLimitReached', (limit) => { + // alert(limit); + // }) + .on('onDragEnter', () => { + this.dragAndDropOver(true); + }) + .on('onDragLeave', () => { + this.dragAndDropOver(false); + }) + .on('onBodyDragEnter', () => { + this.attachmentsArea(); + this.dragAndDropVisible(true); + }) + .on('onBodyDragLeave', () => { + this.dragAndDropVisible(false); + }) + .on('onProgress', (id, loaded, total) => { + let item = uploadCache[id]; + if (!item) { + item = this.getAttachmentById(id); if (item) { - item.progress(Math.floor((loaded / total) * 100)); + uploadCache[id] = item; } - }) - .on('onSelect', (sId, oData) => { - this.dragAndDropOver(false); + } - const fileName = undefined === oData.FileName ? '' : oData.FileName.toString(), - size = pInt(oData.Size, null), - attachment = new ComposeAttachmentModel(sId, fileName, size); + if (item) { + item.progress(Math.floor((loaded / total) * 100)); + } + }) + .on('onSelect', (sId, oData) => { + this.dragAndDropOver(false); - attachment.cancel = this.cancelAttachmentHelper(sId, oJua); + const fileName = undefined === oData.FileName ? '' : oData.FileName.toString(), + size = pInt(oData.Size, null), + attachment = new ComposeAttachmentModel(sId, fileName, size); - this.attachments.push(attachment); + attachment.cancel = this.cancelAttachmentHelper(sId, oJua); - this.attachmentsArea(); + this.attachments.push(attachment); - if (0 < size && 0 < attachmentSizeLimit && attachmentSizeLimit < size) { + this.attachmentsArea(); + + if (0 < size && 0 < attachmentSizeLimit && attachmentSizeLimit < size) { + attachment + .waiting(false) + .uploading(true) + .complete(true) + .error(i18n('UPLOAD/ERROR_FILE_IS_TOO_BIG')); + + return false; + } + + return true; + }) + .on('onStart', (id) => { + let item = uploadCache[id]; + if (!item) { + item = this.getAttachmentById(id); + if (item) { + uploadCache[id] = item; + } + } + + if (item) { + item + .waiting(false) + .uploading(true) + .complete(false); + } + }) + .on('onComplete', (id, result, data) => { + const attachment = this.getAttachmentById(id), + response = (data && data.Result) || {}, + errorCode = response.ErrorCode, + attachmentJson = result && response.Attachment; + + let error = ''; + if (null != errorCode) { + error = getUploadErrorDescByCode(errorCode); + } else if (!attachmentJson) { + error = i18n('UPLOAD/ERROR_UNKNOWN'); + } + + if (attachment) { + if (error) { attachment .waiting(false) - .uploading(true) + .uploading(false) .complete(true) - .error(i18n('UPLOAD/ERROR_FILE_IS_TOO_BIG')); - - return false; - } - - return true; - }) - .on('onStart', (id) => { - let item = uploadCache[id]; - if (!item) { - item = this.getAttachmentById(id); - if (item) { - uploadCache[id] = item; - } - } - - if (item) { - item + .error(error + '\n' + response.ErrorMessage); + } else if (attachmentJson) { + attachment .waiting(false) - .uploading(true) - .complete(false); - } - }) - .on('onComplete', (id, result, data) => { - const attachment = this.getAttachmentById(id), - response = (data && data.Result) || {}, - errorCode = response.ErrorCode, - attachmentJson = result && response.Attachment; + .uploading(false) + .complete(true); - let error = ''; - if (null != errorCode) { - error = getUploadErrorDescByCode(errorCode); - } else if (!attachmentJson) { - error = i18n('UPLOAD/ERROR_UNKNOWN'); + attachment.initByUploadJson(attachmentJson); } - if (attachment) { - if (error) { - attachment - .waiting(false) - .uploading(false) - .complete(true) - .error(error + '\n' + response.ErrorMessage); - } else if (attachmentJson) { - attachment - .waiting(false) - .uploading(false) - .complete(true); - - attachment.initByUploadJson(attachmentJson); - } - - if (undefined === uploadCache[id]) { - delete uploadCache[id]; - } + if (undefined === uploadCache[id]) { + delete uploadCache[id]; } - }); + } + }); - this.addAttachmentEnabled(true); - } + this.addAttachmentEnabled(true); shortcuts.add('q', 'meta', Scope.Compose, ()=>false); shortcuts.add('w', 'meta', Scope.Compose, ()=>false); @@ -1514,7 +1510,7 @@ class ComposePopupView extends AbstractViewPopup { quotedMailHeader: '', // header to be added before the quoted mail keepAttachments: false, // add attachments of quotedMail to editor (default: false) */ - signMsg: confirm('Also sign this message?') + signMsg: this.pgpSign() || confirm('Sign this message?') }).then(editor => this.mailvelope = editor); } this.viewArea('mailvelope'); @@ -1542,11 +1538,12 @@ class ComposePopupView extends AbstractViewPopup { } initPgpEncrypt() { - PgpUserStore.hasPublicKeyForEmails(this.allRecipients(), 1).then(result => { + const recipients = this.allRecipients(); + PgpUserStore.hasPublicKeyForEmails(recipients).then(result => { console.log({canPgpEncrypt:result}); this.canPgpEncrypt(result); }); - PgpUserStore.mailvelopeHasPublicKeyForEmails(this.allRecipients(), 1).then(result => { + PgpUserStore.mailvelopeHasPublicKeyForEmails(recipients).then(result => { console.log({canMailvelope:result}); this.canMailvelope(result); if (!result) { diff --git a/snappymail/v/0.0.0/app/templates/Views/User/PopupsCompose.html b/snappymail/v/0.0.0/app/templates/Views/User/PopupsCompose.html index f067f2c28..fb3e75cec 100644 --- a/snappymail/v/0.0.0/app/templates/Views/User/PopupsCompose.html +++ b/snappymail/v/0.0.0/app/templates/Views/User/PopupsCompose.html @@ -40,7 +40,7 @@ π -