Changes for "Request failed" error #1220

This commit is contained in:
the-djmaze 2023-08-21 16:02:57 +02:00
parent 4c5f19579c
commit 4e04461f80
7 changed files with 104 additions and 156 deletions

View file

@ -61,9 +61,7 @@ import { AskPopupView } from 'View/Popup/Ask';
import { import {
folderInformation, folderInformation,
folderInformationMultiply, folderInformationMultiply,
setRefreshFoldersInterval, setRefreshFoldersInterval
messagesMoveHelper,
messagesDeleteHelper
} from 'Common/Folders'; } from 'Common/Folders';
import { loadFolders } from 'Model/FolderCollection'; import { loadFolders } from 'Model/FolderCollection';
@ -133,13 +131,11 @@ 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, oUids); MessagelistUserStore.moveMessages(sFromFolderFullName, oUids);
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, oUids);
} }
]); ]);
} else if (oMoveFolder) { } else if (oMoveFolder) {
messagesMoveHelper(sFromFolderFullName, oMoveFolder.fullName, oUids); MessagelistUserStore.moveMessages(sFromFolderFullName, oUids, oMoveFolder.fullName);
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, oUids, oMoveFolder.fullName);
} }
} }

View file

@ -1,13 +1,11 @@
import { isArray, arrayLength } from 'Common/Utils'; import { isArray, arrayLength } from 'Common/Utils';
import { import {
setFolderETag,
getFolderInboxName, getFolderInboxName,
getFolderFromCacheList getFolderFromCacheList
} from 'Common/Cache'; } from 'Common/Cache';
import { SettingsUserStore } from 'Stores/User/Settings'; import { SettingsUserStore } from 'Stores/User/Settings';
import { FolderUserStore } from 'Stores/User/Folder'; import { FolderUserStore } from 'Stores/User/Folder';
import { MessagelistUserStore } from 'Stores/User/Messagelist'; import { MessagelistUserStore } from 'Stores/User/Messagelist';
import { getNotification } from 'Common/Translator';
import Remote from 'Remote/User/Fetch'; import Remote from 'Remote/User/Fetch';
@ -197,76 +195,6 @@ folderInformationMultiply = (boot = false) => {
} }
}, },
moveOrDeleteResponseHelper = (iError, oData) => {
if (iError) {
setFolderETag(FolderUserStore.currentFolderFullName(), '');
alert(getNotification(iError));
} else if (FolderUserStore.currentFolder()) {
if (2 === arrayLength(oData.Result)) {
setFolderETag(oData.Result[0], oData.Result[1]);
} else {
setFolderETag(FolderUserStore.currentFolderFullName(), '');
}
MessagelistUserStore.reload(!MessagelistUserStore.length);
}
},
messagesMoveHelper = (fromFolderFullName, toFolderFullName, uidsForMove) => {
const
sSpamFolder = FolderUserStore.spamFolder(),
isSpam = sSpamFolder === toFolderFullName,
isHam = !isSpam && sSpamFolder === fromFolderFullName && getFolderInboxName() === toFolderFullName;
Remote.abort('MessageList', 'reload').request('MessageMove',
moveOrDeleteResponseHelper,
{
fromFolder: fromFolderFullName,
toFolder: toFolderFullName,
uids: [...uidsForMove].join(','),
markAsRead: (isSpam || FolderUserStore.trashFolder() === toFolderFullName) ? 1 : 0,
learning: isSpam ? 'SPAM' : isHam ? 'HAM' : ''
}
);
},
messagesDeleteHelper = (sFromFolderFullName, aUidForRemove) => {
Remote.abort('MessageList', 'reload').request('MessageDelete',
moveOrDeleteResponseHelper,
{
folder: sFromFolderFullName,
uids: [...aUidForRemove].join(',')
}
);
},
/**
* @param {string} sFromFolderFullName
* @param {Set} oUids
* @param {string} sToFolderFullName
* @param {boolean=} bCopy = false
*/
moveMessagesToFolder = (sFromFolderFullName, oUids, sToFolderFullName, bCopy) => {
if (sFromFolderFullName !== sToFolderFullName && oUids?.size) {
const oFromFolder = getFolderFromCacheList(sFromFolderFullName),
oToFolder = getFolderFromCacheList(sToFolderFullName);
if (oFromFolder && oToFolder) {
bCopy
? Remote.request('MessageCopy', null, {
fromFolder: oFromFolder.fullName,
toFolder: oToFolder.fullName,
uids: [...oUids].join(',')
})
: messagesMoveHelper(oFromFolder.fullName, oToFolder.fullName, oUids);
MessagelistUserStore.removeMessagesFromList(oFromFolder.fullName, oUids, oToFolder.fullName, bCopy);
return true;
}
}
return false;
},
dropFilesInFolder = (sFolderFullName, files) => { dropFilesInFolder = (sFolderFullName, files) => {
let count = files.length; let count = files.length;
for (const file of files) { for (const file of files) {

View file

@ -65,8 +65,8 @@ export class Selector {
this.listChecked.subscribe(items => { this.listChecked.subscribe(items => {
if (items.length) { if (items.length) {
koSelectedItem() ? koSelectedItem(null) : koSelectedItem.valueHasMutated?.(); koSelectedItem() ? koSelectedItem(null) : koSelectedItem.valueHasMutated?.();
} else if (this.autoSelect()) { } else {
koSelectedItem(koFocusedItem()); this.autoSelect();
} }
}); });
@ -174,9 +174,7 @@ export class Selector {
this.iFocusedNextHelper = 0; this.iFocusedNextHelper = 0;
} }
if (this.autoSelect() && !isChecked && !koSelectedItem()) { !isChecked && !koSelectedItem() && this.autoSelect();
koSelectedItem(koFocusedItem());
}
} }
aCheckedCache = []; aCheckedCache = [];
@ -250,8 +248,10 @@ export class Selector {
/** /**
* @returns {boolean} * @returns {boolean}
*/ */
autoSelect() { autoSelect(bForce) {
return (this.oCallbacks.AutoSelect || (()=>1))() && this.focusedItem(); (bForce || (this.oCallbacks.AutoSelect || (()=>1))())
&& this.focusedItem()
&& this.selectedItem(this.focusedItem());
} }
/** /**
@ -327,9 +327,7 @@ export class Selector {
if (result) { if (result) {
this.focusedItem(result); this.focusedItem(result);
if ((this.autoSelect() || bForceSelect) && !this.list.hasChecked()) { !this.list.hasChecked() && this.autoSelect(bForceSelect);
this.selectedItem(result);
}
this.scrollToFocused(); this.scrollToFocused();
} }
} }

View file

@ -6,7 +6,7 @@ import { doc, elementById, addEventsListeners, dropdowns, leftPanelDisabled } fr
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';
import { moveMessagesToFolder, dropFilesInFolder } from 'Common/Folders'; import { dropFilesInFolder } from 'Common/Folders';
import { setExpandedFolder } from 'Model/FolderCollection'; import { setExpandedFolder } from 'Model/FolderCollection';
import { FolderUserStore } from 'Stores/User/Folder'; import { FolderUserStore } from 'Stores/User/Folder';
import { MessagelistUserStore } from 'Stores/User/Messagelist'; import { MessagelistUserStore } from 'Stores/User/Messagelist';
@ -63,7 +63,9 @@ const rlContentType = 'snappymail/action',
dragDrop = (e, element, folder, dragData) => { dragDrop = (e, element, folder, dragData) => {
dragStop(e, element); dragStop(e, element);
if (dragMessages() && 'copyMove' == e.dataTransfer.effectAllowed) { if (dragMessages() && 'copyMove' == e.dataTransfer.effectAllowed) {
moveMessagesToFolder(FolderUserStore.currentFolderFullName(), dragData.data, folder.fullName, e.ctrlKey); MessagelistUserStore.moveMessages(
FolderUserStore.currentFolderFullName(), dragData.data, folder.fullName, e.ctrlKey
);
} else if (e.dataTransfer.types.includes('Files')) { } else if (e.dataTransfer.types.includes('Files')) {
dropFilesInFolder(folder.fullName, e.dataTransfer.files); dropFilesInFolder(folder.fullName, e.dataTransfer.files);
} }

View file

@ -166,9 +166,9 @@ MessagelistUserStore.notifyNewMessages = (folder, newMessages) => {
} }
MessagelistUserStore.canAutoSelect = () => MessagelistUserStore.canAutoSelect = () =>
!/is:unseen/.test(MessagelistUserStore.mainSearch()) !disableAutoSelect()
&& !disableAutoSelect()
&& SettingsUserStore.usePreviewPane(); && SettingsUserStore.usePreviewPane();
// && !SettingsUserStore.showNextMessage();
let prevFolderName; let prevFolderName;
@ -399,53 +399,92 @@ MessagelistUserStore.setAction = (sFolderFullName, iSetAction, messages) => {
* @param {string=} toFolderFullName = '' * @param {string=} toFolderFullName = ''
* @param {boolean=} copy = false * @param {boolean=} copy = false
*/ */
MessagelistUserStore.removeMessagesFromList = ( MessagelistUserStore.moveMessages = (
fromFolderFullName, oUids, toFolderFullName = '', copy = false fromFolderFullName, oUids, toFolderFullName = '', copy = false
) => { ) => {
const fromFolder = getFolderFromCacheList(fromFolderFullName);
if (!fromFolder || !oUids?.size) return;
let unseenCount = 0, let unseenCount = 0,
setPage = 0, setPage = 0,
currentMessage = MessageUserStore.message(); currentMessage = MessageUserStore.message();
const trashFolder = FolderUserStore.trashFolder(), const toFolder = toFolderFullName ? getFolderFromCacheList(toFolderFullName) : null,
trashFolder = FolderUserStore.trashFolder(),
spamFolder = FolderUserStore.spamFolder(), spamFolder = FolderUserStore.spamFolder(),
fromFolder = getFolderFromCacheList(fromFolderFullName), page = MessagelistUserStore.page(),
toFolder = toFolderFullName ? getFolderFromCacheList(toFolderFullName) : null,
messages = messages =
FolderUserStore.currentFolderFullName() === fromFolderFullName FolderUserStore.currentFolderFullName() === fromFolderFullName
? MessagelistUserStore.filter(item => item && oUids.has(item.uid)) ? MessagelistUserStore.filter(item => item && oUids.has(item.uid))
: []; : [],
moveOrDeleteResponseHelper = (iError, oData) => {
if (iError) {
setFolderETag(FolderUserStore.currentFolderFullName(), '');
alert(getNotification(iError));
} else if (FolderUserStore.currentFolder()) {
if (2 === arrayLength(oData.Result)) {
setFolderETag(oData.Result[0], oData.Result[1]);
} else {
setFolderETag(FolderUserStore.currentFolderFullName(), '');
}
MessagelistUserStore.count(MessagelistUserStore.count() - oUids.size);
if (page > MessagelistUserStore.pageCount()) {
setPage = MessagelistUserStore.pageCount();
}
if (MessagelistUserStore.threadUid()
&& MessagelistUserStore.length
&& MessagelistUserStore.find(item => item?.deleted() && item.uid == MessagelistUserStore.threadUid())
) {
const message = MessagelistUserStore.find(item => item && !item.deleted());
if (!message) {
if (1 < page) {
setPage = page - 1;
} else {
MessagelistUserStore.threadUid(0);
setPage = MessagelistUserStore.pageBeforeThread();
}
} else if (MessagelistUserStore.threadUid() != message.uid) {
MessagelistUserStore.threadUid(message.uid);
setPage = page;
}
}
if (setPage) {
MessagelistUserStore.page(setPage);
replaceHash(
mailBox(
FolderUserStore.currentFolderFullNameHash(),
setPage,
MessagelistUserStore.listSearch(),
MessagelistUserStore.threadUid()
)
);
}
MessagelistUserStore.reload(!MessagelistUserStore.count());
}
};
messages.forEach(item => item?.isUnseen() && ++unseenCount); messages.forEach(item => item?.isUnseen() && ++unseenCount);
if (fromFolder) {
fromFolder.etag = '';
if (!copy) { if (!copy) {
fromFolder.totalEmails( fromFolder.etag = '';
0 <= fromFolder.totalEmails() - oUids.size ? fromFolder.totalEmails() - oUids.size : 0 fromFolder.totalEmails(Math.max(0, fromFolder.totalEmails() - oUids.size));
);
if (0 < unseenCount) {
fromFolder.unreadEmails(Math.max(0, fromFolder.unreadEmails() - unseenCount)); fromFolder.unreadEmails(Math.max(0, fromFolder.unreadEmails() - unseenCount));
} }
}
}
if (toFolder) { if (toFolder) {
toFolder.etag = ''; toFolder.etag = '';
if (trashFolder === toFolder.fullName || spamFolder === toFolder.fullName) {
unseenCount = 0;
}
toFolder.totalEmails(toFolder.totalEmails() + oUids.size); toFolder.totalEmails(toFolder.totalEmails() + oUids.size);
if (0 < unseenCount) { if (trashFolder !== toFolder.fullName && spamFolder !== toFolder.fullName) {
toFolder.unreadEmails(toFolder.unreadEmails() + unseenCount); toFolder.unreadEmails(toFolder.unreadEmails() + unseenCount);
} }
toFolder.actionBlink(true); toFolder.actionBlink(true);
} }
if (messages.length) { if (messages.length) {
disableAutoSelect(true);
if (copy) { if (copy) {
messages.forEach(item => item.checked(false)); messages.forEach(item => item.checked(false));
} else { } else {
@ -468,49 +507,37 @@ MessagelistUserStore.removeMessagesFromList = (
currentMessage = null; currentMessage = null;
MessageUserStore.message(null); MessageUserStore.message(null);
} }
item.deleted(true); item.deleted(true);
MessagelistUserStore.remove(item);
}); });
setTimeout(() => messages.forEach(item => MessagelistUserStore.remove(item)), 350);
const
count = MessagelistUserStore.count() - messages.length,
page = MessagelistUserStore.page();
MessagelistUserStore.count(count);
if (page > MessagelistUserStore.pageCount()) {
setPage = MessagelistUserStore.pageCount();
}
} }
} }
if (MessagelistUserStore.threadUid() if (toFolderFullName) {
&& MessagelistUserStore.length if (toFolder && fromFolderFullName != toFolderFullName) {
&& MessagelistUserStore.find(item => item?.deleted() && item.uid == MessagelistUserStore.threadUid()) const params = {
) { fromFolder: fromFolderFullName,
const message = MessagelistUserStore.find(item => item && !item.deleted()); toFolder: toFolderFullName,
if (!message) { uids: [...oUids].join(',')
if (1 < MessagelistUserStore.page()) { };
setPage = MessagelistUserStore.page() - 1; if (copy) {
Remote.request('MessageCopy', null, params);
} else { } else {
MessagelistUserStore.threadUid(0); const
setPage = MessagelistUserStore.pageBeforeThread(); isSpam = spamFolder === toFolderFullName,
} isHam = !isSpam && spamFolder === fromFolderFullName && getFolderInboxName() === toFolderFullName;
} else if (MessagelistUserStore.threadUid() != message.uid) { params.markAsRead = (isSpam || FolderUserStore.trashFolder() === toFolderFullName) ? 1 : 0;
MessagelistUserStore.threadUid(message.uid); params.learning = isSpam ? 'SPAM' : isHam ? 'HAM' : '';
setPage = MessagelistUserStore.page(); Remote.abort('MessageList', 'reload').request('MessageMove', moveOrDeleteResponseHelper, params);
} }
} }
} else {
if (setPage) { Remote.abort('MessageList', 'reload').request('MessageDelete',
MessagelistUserStore.page(setPage); moveOrDeleteResponseHelper,
replaceHash( {
mailBox( folder: fromFolderFullName,
FolderUserStore.currentFolderFullNameHash(), uids: [...oUids].join(',')
setPage, }
MessagelistUserStore.listSearch(),
MessagelistUserStore.threadUid()
)
); );
} }
}; };

View file

@ -15,7 +15,7 @@ import { encodeHtml, HtmlEditor, htmlToPlain } from 'Common/Html';
import { koArrayWithDestroy, addObservablesTo, addComputablesTo, addSubscribablesTo } from 'External/ko'; import { koArrayWithDestroy, addObservablesTo, addComputablesTo, addSubscribablesTo } from 'External/ko';
import { UNUSED_OPTION_VALUE } from 'Common/Consts'; import { UNUSED_OPTION_VALUE } from 'Common/Consts';
import { folderInformation, messagesDeleteHelper } from 'Common/Folders'; import { folderInformation } from 'Common/Folders';
import { serverRequest } from 'Common/Links'; import { serverRequest } from 'Common/Links';
import { i18n, getNotification, getUploadErrorDescByCode, timestampToString } from 'Common/Translator'; import { i18n, getNotification, getUploadErrorDescByCode, timestampToString } from 'Common/Translator';
import { setFolderETag } from 'Common/Cache'; import { setFolderETag } from 'Common/Cache';
@ -586,8 +586,7 @@ export class ComposePopupView extends AbstractViewPopup {
const const
sFromFolderFullName = this.draftsFolder(), sFromFolderFullName = this.draftsFolder(),
oUids = new Set([this.draftUid()]); oUids = new Set([this.draftUid()]);
messagesDeleteHelper(sFromFolderFullName, oUids); MessagelistUserStore.moveMessages(sFromFolderFullName, oUids);
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, oUids);
this.close(); this.close();
} }
]); ]);

View file

@ -20,8 +20,6 @@ import { FolderCreatePopupView } from 'View/Popup/FolderCreate';
import { ContactsPopupView } from 'View/Popup/Contacts'; import { ContactsPopupView } from 'View/Popup/Contacts';
import { ComposePopupView } from 'View/Popup/Compose'; import { ComposePopupView } from 'View/Popup/Compose';
import { moveMessagesToFolder } from 'Common/Folders';
import { setExpandedFolder, foldersFilter } from 'Model/FolderCollection'; import { setExpandedFolder, foldersFilter } from 'Model/FolderCollection';
export class MailFolderList extends AbstractViewLeft { export class MailFolderList extends AbstractViewLeft {
@ -92,7 +90,7 @@ export class MailFolderList extends AbstractViewLeft {
if (folder) { if (folder) {
if (moveAction()) { if (moveAction()) {
moveAction(false); moveAction(false);
moveMessagesToFolder( MessagelistUserStore.moveMessages(
FolderUserStore.currentFolderFullName(), FolderUserStore.currentFolderFullName(),
MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails(), MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails(),
folder.fullName, folder.fullName,