mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
listCheckedOrSelectedUidsWithSubMails() now returns Set instead of Array
This commit is contained in:
parent
55faeaa1d1
commit
0fce269a82
7 changed files with 33 additions and 39 deletions
|
|
@ -105,10 +105,10 @@ export class AppUser extends AbstractApp {
|
||||||
/**
|
/**
|
||||||
* @param {number} iFolderType
|
* @param {number} iFolderType
|
||||||
* @param {string} sFromFolderFullName
|
* @param {string} sFromFolderFullName
|
||||||
* @param {Array} aUidForRemove
|
* @param {Set} oUids
|
||||||
* @param {boolean=} bDelete = false
|
* @param {boolean=} bDelete = false
|
||||||
*/
|
*/
|
||||||
moveMessagesToFolderType(iFolderType, sFromFolderFullName, aUidForRemove, bDelete) {
|
moveMessagesToFolderType(iFolderType, sFromFolderFullName, oUids, bDelete) {
|
||||||
let oMoveFolder = null,
|
let oMoveFolder = null,
|
||||||
nSetSystemFoldersNotification = null;
|
nSetSystemFoldersNotification = null;
|
||||||
|
|
||||||
|
|
@ -150,13 +150,13 @@ export class AppUser extends AbstractApp {
|
||||||
showScreenPopup(AskPopupView, [
|
showScreenPopup(AskPopupView, [
|
||||||
i18n('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'),
|
i18n('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'),
|
||||||
() => {
|
() => {
|
||||||
messagesDeleteHelper(sFromFolderFullName, aUidForRemove);
|
messagesDeleteHelper(sFromFolderFullName, oUids);
|
||||||
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, aUidForRemove);
|
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, oUids);
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
} else if (oMoveFolder) {
|
} else if (oMoveFolder) {
|
||||||
messagesMoveHelper(sFromFolderFullName, oMoveFolder.fullName, aUidForRemove);
|
messagesMoveHelper(sFromFolderFullName, oMoveFolder.fullName, oUids);
|
||||||
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, aUidForRemove, oMoveFolder.fullName);
|
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, oUids, oMoveFolder.fullName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -254,7 +254,7 @@ messagesMoveHelper = (fromFolderFullName, toFolderFullName, uidsForMove) => {
|
||||||
{
|
{
|
||||||
FromFolder: fromFolderFullName,
|
FromFolder: fromFolderFullName,
|
||||||
ToFolder: toFolderFullName,
|
ToFolder: toFolderFullName,
|
||||||
Uids: uidsForMove.join(','),
|
Uids: [...uidsForMove].join(','),
|
||||||
MarkAsRead: (isSpam || FolderUserStore.trashFolder() === toFolderFullName) ? 1 : 0,
|
MarkAsRead: (isSpam || FolderUserStore.trashFolder() === toFolderFullName) ? 1 : 0,
|
||||||
Learning: isSpam ? 'SPAM' : isHam ? 'HAM' : ''
|
Learning: isSpam ? 'SPAM' : isHam ? 'HAM' : ''
|
||||||
}
|
}
|
||||||
|
|
@ -266,19 +266,19 @@ messagesDeleteHelper = (sFromFolderFullName, aUidForRemove) => {
|
||||||
moveOrDeleteResponseHelper,
|
moveOrDeleteResponseHelper,
|
||||||
{
|
{
|
||||||
Folder: sFromFolderFullName,
|
Folder: sFromFolderFullName,
|
||||||
Uids: aUidForRemove.join(',')
|
Uids: [...aUidForRemove].join(',')
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} sFromFolderFullName
|
* @param {string} sFromFolderFullName
|
||||||
* @param {Array} aUidForMove
|
* @param {Set} oUids
|
||||||
* @param {string} sToFolderFullName
|
* @param {string} sToFolderFullName
|
||||||
* @param {boolean=} bCopy = false
|
* @param {boolean=} bCopy = false
|
||||||
*/
|
*/
|
||||||
moveMessagesToFolder = (sFromFolderFullName, aUidForMove, sToFolderFullName, bCopy) => {
|
moveMessagesToFolder = (sFromFolderFullName, oUids, sToFolderFullName, bCopy) => {
|
||||||
if (sFromFolderFullName !== sToFolderFullName && arrayLength(aUidForMove)) {
|
if (sFromFolderFullName !== sToFolderFullName && oUids?.size) {
|
||||||
const oFromFolder = getFolderFromCacheList(sFromFolderFullName),
|
const oFromFolder = getFolderFromCacheList(sFromFolderFullName),
|
||||||
oToFolder = getFolderFromCacheList(sToFolderFullName);
|
oToFolder = getFolderFromCacheList(sToFolderFullName);
|
||||||
|
|
||||||
|
|
@ -287,13 +287,13 @@ moveMessagesToFolder = (sFromFolderFullName, aUidForMove, sToFolderFullName, bCo
|
||||||
Remote.request('MessageCopy', null, {
|
Remote.request('MessageCopy', null, {
|
||||||
FromFolder: oFromFolder.fullName,
|
FromFolder: oFromFolder.fullName,
|
||||||
ToFolder: oToFolder.fullName,
|
ToFolder: oToFolder.fullName,
|
||||||
Uids: aUidForMove.join(',')
|
Uids: [...oUids].join(',')
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
messagesMoveHelper(oFromFolder.fullName, oToFolder.fullName, aUidForMove);
|
messagesMoveHelper(oFromFolder.fullName, oToFolder.fullName, oUids);
|
||||||
}
|
}
|
||||||
|
|
||||||
MessagelistUserStore.removeMessagesFromList(oFromFolder.fullName, aUidForMove, oToFolder.fullName, bCopy);
|
MessagelistUserStore.removeMessagesFromList(oFromFolder.fullName, oUids, oToFolder.fullName, bCopy);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
9
dev/External/User/ko.js
vendored
9
dev/External/User/ko.js
vendored
|
|
@ -3,7 +3,6 @@ import ko from 'ko';
|
||||||
import { HtmlEditor } from 'Common/Html';
|
import { HtmlEditor } from 'Common/Html';
|
||||||
import { timeToNode } from 'Common/Translator';
|
import { timeToNode } from 'Common/Translator';
|
||||||
import { elementById, addEventsListeners, dropdowns } from 'Common/Globals';
|
import { elementById, addEventsListeners, dropdowns } from 'Common/Globals';
|
||||||
import { isArray } from 'Common/Utils';
|
|
||||||
import { dropdownsDetectVisibility } from 'Common/UtilsUser';
|
import { dropdownsDetectVisibility } from 'Common/UtilsUser';
|
||||||
import { EmailAddressesComponent } from 'Component/EmailAddresses';
|
import { EmailAddressesComponent } from 'Component/EmailAddresses';
|
||||||
import { ThemeStore } from 'Stores/Theme';
|
import { ThemeStore } from 'Stores/Theme';
|
||||||
|
|
@ -97,7 +96,7 @@ Object.assign(ko.bindingHandlers, {
|
||||||
let data = fValueAccessor()(e);
|
let data = fValueAccessor()(e);
|
||||||
dragImage || (dragImage = elementById('messagesDragImage'));
|
dragImage || (dragImage = elementById('messagesDragImage'));
|
||||||
if (data && dragImage && !ThemeStore.isMobile()) {
|
if (data && dragImage && !ThemeStore.isMobile()) {
|
||||||
dragImage.querySelector('.text').textContent = data.uids.length;
|
dragImage.querySelector('.text').textContent = data.size;
|
||||||
let img = dragImage.querySelector('i');
|
let img = dragImage.querySelector('i');
|
||||||
img.classList.toggle('icon-copy', e.ctrlKey);
|
img.classList.toggle('icon-copy', e.ctrlKey);
|
||||||
img.classList.toggle('icon-mail', !e.ctrlKey);
|
img.classList.toggle('icon-mail', !e.ctrlKey);
|
||||||
|
|
@ -107,7 +106,7 @@ Object.assign(ko.bindingHandlers, {
|
||||||
dragImage.style.top = e.clientY + 'px';
|
dragImage.style.top = e.clientY + 'px';
|
||||||
dragImage.style.right = 'auto';
|
dragImage.style.right = 'auto';
|
||||||
|
|
||||||
setDragAction(e, 'messages', e.ctrlKey ? 'copy' : 'move', data, dragImage);
|
setDragAction(e, 'messages', data.copy ? 'copy' : 'move', data, dragImage);
|
||||||
|
|
||||||
// Remove the Chrome visibility
|
// Remove the Chrome visibility
|
||||||
dragImage.style.cssText = '';
|
dragImage.style.cssText = '';
|
||||||
|
|
@ -150,8 +149,8 @@ Object.assign(ko.bindingHandlers, {
|
||||||
fnStop(e);
|
fnStop(e);
|
||||||
if (dragMessages() && ['move','copy'].includes(e.dataTransfer.effectAllowed)) {
|
if (dragMessages() && ['move','copy'].includes(e.dataTransfer.effectAllowed)) {
|
||||||
let data = dragData.data;
|
let data = dragData.data;
|
||||||
if (folder && data?.folder && isArray(data.uids)) {
|
if (folder && data?.folder && data.size) {
|
||||||
moveMessagesToFolder(data.folder, data.uids, folder.fullName, data.copy && e.ctrlKey);
|
moveMessagesToFolder(data.folder, data, folder.fullName, data.copy && e.ctrlKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -107,11 +107,11 @@ addComputablesTo(MessagelistUserStore, {
|
||||||
},
|
},
|
||||||
|
|
||||||
listCheckedOrSelectedUidsWithSubMails: () => {
|
listCheckedOrSelectedUidsWithSubMails: () => {
|
||||||
let result = [];
|
let result = new Set;
|
||||||
MessagelistUserStore.listCheckedOrSelected().forEach(message => {
|
MessagelistUserStore.listCheckedOrSelected().forEach(message => {
|
||||||
result.push(message.uid);
|
result.add(message.uid);
|
||||||
if (1 < message.threadsLen()) {
|
if (1 < message.threadsLen()) {
|
||||||
result = result.concat(message.threads()).unique();
|
message.threads().forEach(result.add, result);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return result;
|
return result;
|
||||||
|
|
@ -340,15 +340,13 @@ MessagelistUserStore.setAction = (sFolderFullName, iSetAction, messages) => {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} fromFolderFullName
|
* @param {string} fromFolderFullName
|
||||||
* @param {Array} uidForRemove
|
* @param {Set} oUids
|
||||||
* @param {string=} toFolderFullName = ''
|
* @param {string=} toFolderFullName = ''
|
||||||
* @param {boolean=} copy = false
|
* @param {boolean=} copy = false
|
||||||
*/
|
*/
|
||||||
MessagelistUserStore.removeMessagesFromList = (
|
MessagelistUserStore.removeMessagesFromList = (
|
||||||
fromFolderFullName, uidForRemove, toFolderFullName = '', copy = false
|
fromFolderFullName, oUids, toFolderFullName = '', copy = false
|
||||||
) => {
|
) => {
|
||||||
uidForRemove = uidForRemove.map(mValue => pInt(mValue));
|
|
||||||
|
|
||||||
let unseenCount = 0,
|
let unseenCount = 0,
|
||||||
messageList = MessagelistUserStore,
|
messageList = MessagelistUserStore,
|
||||||
currentMessage = MessageUserStore.message();
|
currentMessage = MessageUserStore.message();
|
||||||
|
|
@ -359,7 +357,7 @@ MessagelistUserStore.removeMessagesFromList = (
|
||||||
toFolder = toFolderFullName ? getFolderFromCacheList(toFolderFullName) : null,
|
toFolder = toFolderFullName ? getFolderFromCacheList(toFolderFullName) : null,
|
||||||
messages =
|
messages =
|
||||||
FolderUserStore.currentFolderFullName() === fromFolderFullName
|
FolderUserStore.currentFolderFullName() === fromFolderFullName
|
||||||
? messageList.filter(item => item && uidForRemove.includes(pInt(item.uid)))
|
? messageList.filter(item => item && oUids.has(item.uid))
|
||||||
: [];
|
: [];
|
||||||
|
|
||||||
messages.forEach(item => item?.isUnseen() && ++unseenCount);
|
messages.forEach(item => item?.isUnseen() && ++unseenCount);
|
||||||
|
|
@ -368,7 +366,7 @@ MessagelistUserStore.removeMessagesFromList = (
|
||||||
fromFolder.hash = '';
|
fromFolder.hash = '';
|
||||||
if (!copy) {
|
if (!copy) {
|
||||||
fromFolder.totalEmails(
|
fromFolder.totalEmails(
|
||||||
0 <= fromFolder.totalEmails() - uidForRemove.length ? fromFolder.totalEmails() - uidForRemove.length : 0
|
0 <= fromFolder.totalEmails() - oUids.size ? fromFolder.totalEmails() - oUids.size : 0
|
||||||
);
|
);
|
||||||
|
|
||||||
if (0 < unseenCount) {
|
if (0 < unseenCount) {
|
||||||
|
|
@ -386,7 +384,7 @@ MessagelistUserStore.removeMessagesFromList = (
|
||||||
unseenCount = 0;
|
unseenCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
toFolder.totalEmails(toFolder.totalEmails() + uidForRemove.length);
|
toFolder.totalEmails(toFolder.totalEmails() + oUids.size);
|
||||||
if (0 < unseenCount) {
|
if (0 < unseenCount) {
|
||||||
toFolder.unreadEmails(toFolder.unreadEmails() + unseenCount);
|
toFolder.unreadEmails(toFolder.unreadEmails() + unseenCount);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -564,9 +564,9 @@ export class ComposePopupView extends AbstractViewPopup {
|
||||||
() => {
|
() => {
|
||||||
const
|
const
|
||||||
sFromFolderFullName = this.draftsFolder(),
|
sFromFolderFullName = this.draftsFolder(),
|
||||||
aUidForRemove = [this.draftUid()];
|
oUids = new Set([this.draftUid()]);
|
||||||
messagesDeleteHelper(sFromFolderFullName, aUidForRemove);
|
messagesDeleteHelper(sFromFolderFullName, oUids);
|
||||||
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, aUidForRemove);
|
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, oUids);
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
|
|
||||||
|
|
@ -384,12 +384,9 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
const item = ko.dataFor(doc.elementFromPoint(event.clientX, event.clientY));
|
const item = ko.dataFor(doc.elementFromPoint(event.clientX, event.clientY));
|
||||||
item?.checked?.(true);
|
item?.checked?.(true);
|
||||||
const uids = MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails();
|
const uids = MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails();
|
||||||
item && !uids.includes(item.uid) && uids.push(item.uid);
|
uids.copy = event.ctrlKey; // dropEffect
|
||||||
return uids.length ? {
|
uids.folder = FolderUserStore.currentFolderFullName();
|
||||||
copy: event.ctrlKey,
|
return uids;
|
||||||
folder: FolderUserStore.currentFolderFullName(),
|
|
||||||
uids: uids
|
|
||||||
} : null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
listSetSeen() {
|
listSetSeen() {
|
||||||
|
|
|
||||||
|
|
@ -499,7 +499,7 @@ export class MailMessageView extends AbstractViewRight {
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
printableCheckedMessageCount() {
|
printableCheckedMessageCount() {
|
||||||
const cnt = MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails().length;
|
const cnt = MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails().size;
|
||||||
return 0 < cnt ? (100 > cnt ? cnt : '99+') : '';
|
return 0 < cnt ? (100 > cnt ? cnt : '99+') : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue