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