mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-27 19:19:21 +03:00
Restructure JavaScript
Split list code from MessageUserStore into MessagelistUserStore Move functions out of AppUser
This commit is contained in:
parent
60b7f61e42
commit
661cd2aaf9
26 changed files with 1144 additions and 1186 deletions
|
|
@ -2,7 +2,7 @@ import { koComputable } from 'External/ko';
|
|||
|
||||
import { i18n, trigger as translatorTrigger } from 'Common/Translator';
|
||||
|
||||
import { MessageUserStore } from 'Stores/User/Message';
|
||||
import { MessagelistUserStore } from 'Stores/User/Messagelist';
|
||||
|
||||
import { AbstractViewPopup } from 'Knoin/AbstractViews';
|
||||
import { FolderUserStore } from 'Stores/User/Folder';
|
||||
|
|
@ -54,7 +54,7 @@ class AdvancedSearchPopupView extends AbstractViewPopup {
|
|||
submitForm() {
|
||||
const search = this.buildSearchString();
|
||||
if (search) {
|
||||
MessageUserStore.mainMessageListSearch(search);
|
||||
MessagelistUserStore.mainSearch(search);
|
||||
}
|
||||
|
||||
this.cancelCommand();
|
||||
|
|
|
|||
|
|
@ -18,9 +18,9 @@ import { encodeHtml, HtmlEditor, htmlToPlain } from 'Common/Html';
|
|||
import { koArrayWithDestroy } from 'External/ko';
|
||||
|
||||
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
|
||||
import { messagesDeleteHelper } from 'Common/Folders';
|
||||
import { serverRequest } from 'Common/Links';
|
||||
import { i18n, getNotification, getUploadErrorDescByCode } from 'Common/Translator';
|
||||
import { timestampToString } from 'Common/Momentor';
|
||||
import { i18n, getNotification, getUploadErrorDescByCode, timestampToString } from 'Common/Translator';
|
||||
import { MessageFlagsCache, setFolderHash } from 'Common/Cache';
|
||||
import { doc, Settings, SettingsGet, getFullscreenElement, exitFullscreen, elementById } from 'Common/Globals';
|
||||
|
||||
|
|
@ -33,6 +33,7 @@ import { PgpUserStore } from 'Stores/User/Pgp';
|
|||
import { OpenPGPUserStore } from 'Stores/User/OpenPGP';
|
||||
import { GnuPGUserStore } from 'Stores/User/GnuPG';
|
||||
import { MessageUserStore } from 'Stores/User/Message';
|
||||
import { MessagelistUserStore } from 'Stores/User/Messagelist';
|
||||
|
||||
import Remote from 'Remote/User/Fetch';
|
||||
|
||||
|
|
@ -521,7 +522,7 @@ class ComposePopupView extends AbstractViewPopup {
|
|||
if (isArray(flagsCache)) {
|
||||
flagsCache.push(('forward' === this.aDraftInfo[0]) ? '$forwarded' : '\\answered');
|
||||
MessageFlagsCache.setFor(this.aDraftInfo[2], this.aDraftInfo[1], flagsCache);
|
||||
MessageUserStore.reloadFlagsAndCachedMessage();
|
||||
MessagelistUserStore.reloadFlagsAndCachedMessage();
|
||||
setFolderHash(this.aDraftInfo[2], '');
|
||||
}
|
||||
}
|
||||
|
|
@ -632,8 +633,8 @@ class ComposePopupView extends AbstractViewPopup {
|
|||
const
|
||||
sFromFolderFullName = this.draftsFolder(),
|
||||
aUidForRemove = [this.draftUid()];
|
||||
rl.app.messagesDeleteHelper(sFromFolderFullName, aUidForRemove);
|
||||
MessageUserStore.removeMessagesFromList(sFromFolderFullName, aUidForRemove);
|
||||
messagesDeleteHelper(sFromFolderFullName, aUidForRemove);
|
||||
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, aUidForRemove);
|
||||
this.closeCommand();
|
||||
}
|
||||
}
|
||||
|
|
@ -684,8 +685,18 @@ class ComposePopupView extends AbstractViewPopup {
|
|||
}, 60000);
|
||||
}
|
||||
|
||||
// getAutocomplete
|
||||
emailsSource(oData, fResponse) {
|
||||
rl.app.getAutocomplete(oData.term, aData => fResponse(aData.map(oEmailItem => oEmailItem.toLine(false))));
|
||||
Remote.suggestions((iError, data) => {
|
||||
if (!iError && isArray(data.Result)) {
|
||||
fResponse(
|
||||
data.Result.map(item => (item && item[0] ? (new EmailModel(item[0], item[1])).toLine(false) : null))
|
||||
.filter(v => v)
|
||||
);
|
||||
} else if (Notification.RequestAborted !== iError) {
|
||||
fResponse([]);
|
||||
}
|
||||
}, oData.term);
|
||||
}
|
||||
|
||||
reloadDraftFolder() {
|
||||
|
|
@ -693,7 +704,7 @@ class ComposePopupView extends AbstractViewPopup {
|
|||
if (draftsFolder && UNUSED_OPTION_VALUE !== draftsFolder) {
|
||||
setFolderHash(draftsFolder, '');
|
||||
if (FolderUserStore.currentFolderFullName() === draftsFolder) {
|
||||
rl.app.reloadMessageList(true);
|
||||
MessagelistUserStore.reload(true);
|
||||
} else {
|
||||
rl.app.folderInformation(draftsFolder);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import { SieveUserStore } from 'Stores/User/Sieve';
|
|||
|
||||
import { AbstractViewPopup } from 'Knoin/AbstractViews';
|
||||
|
||||
import { folderListOptionsBuilder } from 'Common/UtilsUser';
|
||||
import { folderListOptionsBuilder } from 'Common/Folders';
|
||||
|
||||
class FilterPopupView extends AbstractViewPopup {
|
||||
constructor() {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import { i18n, getNotification } from 'Common/Translator';
|
|||
import { setFolderHash } from 'Common/Cache';
|
||||
|
||||
import { MessageUserStore } from 'Stores/User/Message';
|
||||
import { MessagelistUserStore } from 'Stores/User/Messagelist';
|
||||
|
||||
import Remote from 'Remote/User/Fetch';
|
||||
|
||||
|
|
@ -38,7 +39,7 @@ class FolderClearPopupView extends AbstractViewPopup {
|
|||
const folderToClear = this.selectedFolder();
|
||||
if (folderToClear) {
|
||||
MessageUserStore.message(null);
|
||||
MessageUserStore.list([]);
|
||||
MessagelistUserStore([]);
|
||||
|
||||
this.clearingProcess(true);
|
||||
|
||||
|
|
@ -52,7 +53,7 @@ class FolderClearPopupView extends AbstractViewPopup {
|
|||
if (iError) {
|
||||
this.clearingError(getNotification(iError));
|
||||
} else {
|
||||
rl.app.reloadMessageList(true);
|
||||
MessagelistUserStore.reload(true);
|
||||
this.cancelCommand();
|
||||
}
|
||||
}, {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import { koComputable } from 'External/ko';
|
|||
import { Notification } from 'Common/Enums';
|
||||
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
|
||||
import { defaultOptionsAfterRender } from 'Common/Utils';
|
||||
import { folderListOptionsBuilder, sortFolders } from 'Common/UtilsUser';
|
||||
import { folderListOptionsBuilder, sortFolders } from 'Common/Folders';
|
||||
import { getNotification } from 'Common/Translator';
|
||||
|
||||
import { FolderUserStore } from 'Stores/User/Folder';
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import { koComputable, addSubscribablesTo } from 'External/ko';
|
|||
import { SetSystemFoldersNotification } from 'Common/EnumsUser';
|
||||
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
|
||||
import { defaultOptionsAfterRender } from 'Common/Utils';
|
||||
import { folderListOptionsBuilder } from 'Common/UtilsUser';
|
||||
import { folderListOptionsBuilder } from 'Common/Folders';
|
||||
import { initOnStartOrLangChange, i18n } from 'Common/Translator';
|
||||
|
||||
import { FolderUserStore } from 'Stores/User/Folder';
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import { AppUserStore } from 'Stores/User/App';
|
|||
import { SettingsUserStore } from 'Stores/User/Settings';
|
||||
import { FolderUserStore } from 'Stores/User/Folder';
|
||||
import { MessageUserStore } from 'Stores/User/Message';
|
||||
import { MessagelistUserStore } from 'Stores/User/Messagelist';
|
||||
|
||||
import { showScreenPopup } from 'Knoin/Knoin';
|
||||
import { AbstractViewLeft } from 'Knoin/AbstractViews';
|
||||
|
|
@ -22,6 +23,8 @@ import { isArray } from 'Common/Utils';
|
|||
import { ClientSideKeyName } from 'Common/EnumsUser';
|
||||
import * as Local from 'Storage/Client';
|
||||
|
||||
import { moveMessagesToFolder } from 'Common/Folders';
|
||||
|
||||
/**
|
||||
* @param {string} sFullName
|
||||
* @param {boolean} bExpanded
|
||||
|
|
@ -109,9 +112,9 @@ export class MailFolderList extends AbstractViewLeft {
|
|||
if (folder) {
|
||||
if (moveAction()) {
|
||||
moveAction(false);
|
||||
rl.app.moveMessagesToFolder(
|
||||
moveMessagesToFolder(
|
||||
FolderUserStore.currentFolderFullName(),
|
||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
folder.fullName,
|
||||
event.ctrlKey
|
||||
);
|
||||
|
|
|
|||
|
|
@ -15,8 +15,9 @@ import { UNUSED_OPTION_VALUE } from 'Common/Consts';
|
|||
|
||||
import { doc, leftPanelDisabled, moveAction, Settings, SettingsCapa, SettingsGet, fireEvent } from 'Common/Globals';
|
||||
|
||||
import { computedPaginatorHelper, showMessageComposer, folderListOptionsBuilder } from 'Common/UtilsUser';
|
||||
import { computedPaginatorHelper, showMessageComposer, populateMessageBody } from 'Common/UtilsUser';
|
||||
import { FileInfo } from 'Common/File';
|
||||
import { folderListOptionsBuilder, moveMessagesToFolder } from 'Common/Folders';
|
||||
|
||||
import { mailBox, serverRequest } from 'Common/Links';
|
||||
import { Selector } from 'Common/Selector';
|
||||
|
|
@ -34,6 +35,7 @@ import { AppUserStore } from 'Stores/User/App';
|
|||
import { SettingsUserStore } from 'Stores/User/Settings';
|
||||
import { FolderUserStore } from 'Stores/User/Folder';
|
||||
import { MessageUserStore } from 'Stores/User/Message';
|
||||
import { MessagelistUserStore } from 'Stores/User/Messagelist';
|
||||
import { ThemeStore } from 'Stores/Theme';
|
||||
|
||||
import Remote from 'Remote/User/Fetch';
|
||||
|
|
@ -44,8 +46,18 @@ import { AbstractViewRight } from 'Knoin/AbstractViews';
|
|||
import { FolderClearPopupView } from 'View/Popup/FolderClear';
|
||||
import { AdvancedSearchPopupView } from 'View/Popup/AdvancedSearch';
|
||||
|
||||
import { MessageModel } from 'Model/Message';
|
||||
|
||||
const
|
||||
canBeMovedHelper = () => MessageUserStore.hasCheckedOrSelected();
|
||||
canBeMovedHelper = () => MessagelistUserStore.hasCheckedOrSelected(),
|
||||
|
||||
/**
|
||||
* @param {string} sFolderFullName
|
||||
* @param {number} iSetAction
|
||||
* @param {Array=} aMessages = null
|
||||
* @returns {void}
|
||||
*/
|
||||
listAction = (...args) => MessagelistUserStore.setAction(...args);
|
||||
|
||||
export class MailMessageList extends AbstractViewRight {
|
||||
constructor() {
|
||||
|
|
@ -62,23 +74,23 @@ export class MailMessageList extends AbstractViewRight {
|
|||
this.allowSearchAdv = SettingsCapa(Capa.SearchAdv);
|
||||
this.allowDangerousActions = SettingsCapa(Capa.DangerousActions);
|
||||
|
||||
this.messageList = MessageUserStore.list;
|
||||
this.messageList = MessagelistUserStore;
|
||||
|
||||
this.composeInEdit = AppUserStore.composeInEdit;
|
||||
|
||||
this.isMobile = ThemeStore.isMobile;
|
||||
this.leftPanelDisabled = leftPanelDisabled;
|
||||
|
||||
this.messageListSearch = MessageUserStore.listSearch;
|
||||
this.messageListError = MessageUserStore.listError;
|
||||
this.messageListSearch = MessagelistUserStore.listSearch;
|
||||
this.messageListError = MessagelistUserStore.error;
|
||||
|
||||
this.popupVisibility = arePopupsVisible;
|
||||
|
||||
this.useCheckboxesInList = SettingsUserStore.useCheckboxesInList;
|
||||
|
||||
this.messageListThreadUid = MessageUserStore.listEndThreadUid;
|
||||
this.messageListThreadUid = MessagelistUserStore.endThreadUid;
|
||||
|
||||
this.messageListIsLoading = MessageUserStore.listIsLoading;
|
||||
this.messageListIsLoading = MessagelistUserStore.isLoading;
|
||||
|
||||
initOnStartOrLangChange(() => this.emptySubjectValue = i18n('MESSAGE_LIST/EMPTY_SUBJECT_TEXT'));
|
||||
|
||||
|
|
@ -114,44 +126,44 @@ export class MailMessageList extends AbstractViewRight {
|
|||
),
|
||||
|
||||
messageListSearchDesc: () => {
|
||||
const value = MessageUserStore.list().Search;
|
||||
const value = MessagelistUserStore().Search;
|
||||
return value ? i18n('MESSAGE_LIST/SEARCH_RESULT_FOR', { SEARCH: value }) : ''
|
||||
},
|
||||
|
||||
messageListPaginator: computedPaginatorHelper(MessageUserStore.listPage,
|
||||
MessageUserStore.listPageCount),
|
||||
messageListPaginator: computedPaginatorHelper(MessagelistUserStore.page,
|
||||
MessagelistUserStore.pageCount),
|
||||
|
||||
checkAll: {
|
||||
read: () => 0 < MessageUserStore.listChecked().length,
|
||||
read: () => 0 < MessagelistUserStore.listChecked().length,
|
||||
write: (value) => {
|
||||
value = !!value;
|
||||
MessageUserStore.list.forEach(message => message.checked(value));
|
||||
MessagelistUserStore.forEach(message => message.checked(value));
|
||||
}
|
||||
},
|
||||
|
||||
inputProxyMessageListSearch: {
|
||||
read: MessageUserStore.mainMessageListSearch,
|
||||
read: MessagelistUserStore.mainSearch,
|
||||
write: value => this.sLastSearchValue = value
|
||||
},
|
||||
|
||||
isIncompleteChecked: () => {
|
||||
const c = MessageUserStore.listChecked().length;
|
||||
return c && MessageUserStore.list.length > c;
|
||||
const c = MessagelistUserStore.listChecked().length;
|
||||
return c && MessagelistUserStore().length > c;
|
||||
},
|
||||
|
||||
hasMessages: () => 0 < MessageUserStore.list().length,
|
||||
hasMessages: () => 0 < MessagelistUserStore().length,
|
||||
|
||||
isSpamFolder: () => (FolderUserStore.spamFolder() || 0) === MessageUserStore.list().Folder,
|
||||
isSpamFolder: () => (FolderUserStore.spamFolder() || 0) === MessagelistUserStore().Folder,
|
||||
|
||||
isSpamDisabled: () => UNUSED_OPTION_VALUE === FolderUserStore.spamFolder(),
|
||||
|
||||
isTrashFolder: () => (FolderUserStore.trashFolder() || 0) === MessageUserStore.list().Folder,
|
||||
isTrashFolder: () => (FolderUserStore.trashFolder() || 0) === MessagelistUserStore().Folder,
|
||||
|
||||
isDraftFolder: () => (FolderUserStore.draftsFolder() || 0) === MessageUserStore.list().Folder,
|
||||
isDraftFolder: () => (FolderUserStore.draftsFolder() || 0) === MessagelistUserStore().Folder,
|
||||
|
||||
isSentFolder: () => (FolderUserStore.sentFolder() || 0) === MessageUserStore.list().Folder,
|
||||
isSentFolder: () => (FolderUserStore.sentFolder() || 0) === MessagelistUserStore().Folder,
|
||||
|
||||
isArchiveFolder: () => (FolderUserStore.archiveFolder() || 0) === MessageUserStore.list().Folder,
|
||||
isArchiveFolder: () => (FolderUserStore.archiveFolder() || 0) === MessagelistUserStore().Folder,
|
||||
|
||||
isArchiveDisabled: () => UNUSED_OPTION_VALUE === FolderUserStore.archiveFolder(),
|
||||
|
||||
|
|
@ -163,9 +175,9 @@ export class MailMessageList extends AbstractViewRight {
|
|||
isUnSpamVisible: () =>
|
||||
this.isSpamFolder() && !this.isSpamDisabled() && !this.isDraftFolder() && !this.isSentFolder(),
|
||||
|
||||
mobileCheckedStateShow: () => ThemeStore.isMobile() ? 0 < MessageUserStore.listChecked().length : true,
|
||||
mobileCheckedStateShow: () => ThemeStore.isMobile() ? 0 < MessagelistUserStore.listChecked().length : true,
|
||||
|
||||
mobileCheckedStateHide: () => ThemeStore.isMobile() ? !MessageUserStore.listChecked().length : true,
|
||||
mobileCheckedStateHide: () => ThemeStore.isMobile() ? !MessagelistUserStore.listChecked().length : true,
|
||||
|
||||
sortText: () => {
|
||||
let mode = FolderUserStore.sortMode(),
|
||||
|
|
@ -181,20 +193,27 @@ export class MailMessageList extends AbstractViewRight {
|
|||
}
|
||||
});
|
||||
|
||||
this.hasCheckedOrSelectedLines = MessageUserStore.hasCheckedOrSelected,
|
||||
this.hasCheckedOrSelectedLines = MessagelistUserStore.hasCheckedOrSelected,
|
||||
|
||||
this.selector = new Selector(
|
||||
MessageUserStore.list,
|
||||
MessageUserStore.selectorMessageSelected,
|
||||
MessageUserStore.selectorMessageFocused,
|
||||
MessagelistUserStore,
|
||||
MessagelistUserStore.selectedMessage,
|
||||
MessagelistUserStore.focusedMessage,
|
||||
'.messageListItem .actionHandle',
|
||||
'.messageListItem .checkboxMessage',
|
||||
'.messageListItem.focused'
|
||||
);
|
||||
|
||||
this.selector.on('ItemSelect', message => MessageUserStore.selectMessage(message));
|
||||
this.selector.on('ItemSelect', message => {
|
||||
if (message) {
|
||||
MessageUserStore.message(MessageModel.fromMessageListItem(message));
|
||||
populateMessageBody(MessageUserStore.message());
|
||||
} else {
|
||||
MessageUserStore.message(null);
|
||||
}
|
||||
});
|
||||
|
||||
this.selector.on('MiddleClick', message => MessageUserStore.populateMessageBody(message, true));
|
||||
this.selector.on('MiddleClick', message => populateMessageBody(message, true));
|
||||
|
||||
this.selector.on('ItemGetUid', message => (message ? message.generateUid() : ''));
|
||||
|
||||
|
|
@ -213,7 +232,7 @@ export class MailMessageList extends AbstractViewRight {
|
|||
addEventListener('mailbox.message.show', e => {
|
||||
const sFolder = e.detail.Folder, iUid = e.detail.Uid;
|
||||
|
||||
const message = MessageUserStore.list.find(
|
||||
const message = MessagelistUserStore.find(
|
||||
item => item && sFolder === item.folder && iUid == item.uid
|
||||
);
|
||||
|
||||
|
|
@ -227,12 +246,19 @@ export class MailMessageList extends AbstractViewRight {
|
|||
if ('INBOX' !== sFolder) {
|
||||
rl.route.setHash(mailBox(sFolder));
|
||||
}
|
||||
if (sFolder && iUid) {
|
||||
MessageUserStore.message(MessageModel.fromMessageListItem(null));
|
||||
MessageUserStore.message().folder = sFolder;
|
||||
MessageUserStore.message().uid = iUid;
|
||||
|
||||
MessageUserStore.selectMessageByFolderAndUid(sFolder, iUid);
|
||||
populateMessageBody(MessageUserStore.message());
|
||||
} else {
|
||||
MessageUserStore.message(null);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
MessageUserStore.listEndHash.subscribe((() =>
|
||||
MessagelistUserStore.endHash.subscribe((() =>
|
||||
this.selector.scrollToFocused()
|
||||
).throttle(50));
|
||||
|
||||
|
|
@ -260,15 +286,15 @@ export class MailMessageList extends AbstractViewRight {
|
|||
}
|
||||
|
||||
reload() {
|
||||
if (!MessageUserStore.listIsLoading()) {
|
||||
rl.app.reloadMessageList(false, true);
|
||||
if (!MessagelistUserStore.isLoading()) {
|
||||
MessagelistUserStore.reload(false, true);
|
||||
}
|
||||
}
|
||||
|
||||
multyForwardCommand() {
|
||||
showMessageComposer([
|
||||
ComposeType.ForwardAsAttachment,
|
||||
MessageUserStore.listCheckedOrSelected()
|
||||
MessagelistUserStore.listCheckedOrSelected()
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
@ -277,7 +303,7 @@ export class MailMessageList extends AbstractViewRight {
|
|||
rl.app.deleteMessagesFromFolder(
|
||||
FolderType.Trash,
|
||||
FolderUserStore.currentFolderFullName(),
|
||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
false
|
||||
);
|
||||
}
|
||||
|
|
@ -287,7 +313,7 @@ export class MailMessageList extends AbstractViewRight {
|
|||
rl.app.deleteMessagesFromFolder(
|
||||
FolderType.Trash,
|
||||
FolderUserStore.currentFolderFullName(),
|
||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
|
@ -296,7 +322,7 @@ export class MailMessageList extends AbstractViewRight {
|
|||
rl.app.deleteMessagesFromFolder(
|
||||
FolderType.Archive,
|
||||
FolderUserStore.currentFolderFullName(),
|
||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
|
@ -305,7 +331,7 @@ export class MailMessageList extends AbstractViewRight {
|
|||
rl.app.deleteMessagesFromFolder(
|
||||
FolderType.Spam,
|
||||
FolderUserStore.currentFolderFullName(),
|
||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
|
@ -314,7 +340,7 @@ export class MailMessageList extends AbstractViewRight {
|
|||
rl.app.deleteMessagesFromFolder(
|
||||
FolderType.NotSpam,
|
||||
FolderUserStore.currentFolderFullName(),
|
||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
|
@ -339,7 +365,7 @@ export class MailMessageList extends AbstractViewRight {
|
|||
}
|
||||
|
||||
goToUpOrDown(up) {
|
||||
if (MessageUserStore.listChecked().length) {
|
||||
if (MessagelistUserStore.listChecked().length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -384,27 +410,28 @@ export class MailMessageList extends AbstractViewRight {
|
|||
}
|
||||
|
||||
useAutoSelect() {
|
||||
return !MessageUserStore.listDisableAutoSelect()
|
||||
&& !/is:unseen/.test(MessageUserStore.mainMessageListSearch())
|
||||
return !MessagelistUserStore.disableAutoSelect()
|
||||
&& !/is:unseen/.test(MessagelistUserStore.mainSearch())
|
||||
&& SettingsUserStore.usePreviewPane();
|
||||
}
|
||||
|
||||
searchEnterAction() {
|
||||
MessageUserStore.mainMessageListSearch(this.sLastSearchValue);
|
||||
MessagelistUserStore.mainSearch(this.sLastSearchValue);
|
||||
this.inputMessageListSearchFocus(false);
|
||||
}
|
||||
|
||||
cancelSearch() {
|
||||
MessageUserStore.mainMessageListSearch('');
|
||||
MessagelistUserStore.mainSearch('');
|
||||
this.inputMessageListSearchFocus(false);
|
||||
}
|
||||
|
||||
cancelThreadUid() {
|
||||
// history.go(-1) better?
|
||||
rl.route.setHash(
|
||||
mailBox(
|
||||
FolderUserStore.currentFolderFullNameHash(),
|
||||
MessageUserStore.listPageBeforeThread(),
|
||||
MessageUserStore.listSearch()
|
||||
MessagelistUserStore.pageBeforeThread(),
|
||||
MessagelistUserStore.listSearch()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
@ -415,10 +442,10 @@ export class MailMessageList extends AbstractViewRight {
|
|||
* @returns {boolean}
|
||||
*/
|
||||
moveSelectedMessagesToFolder(sToFolderFullName, bCopy) {
|
||||
if (MessageUserStore.hasCheckedOrSelected()) {
|
||||
rl.app.moveMessagesToFolder(
|
||||
if (MessagelistUserStore.hasCheckedOrSelected()) {
|
||||
moveMessagesToFolder(
|
||||
FolderUserStore.currentFolderFullName(),
|
||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||
sToFolderFullName,
|
||||
bCopy
|
||||
);
|
||||
|
|
@ -430,7 +457,7 @@ export class MailMessageList extends AbstractViewRight {
|
|||
getDragData(event) {
|
||||
const item = ko.dataFor(doc.elementFromPoint(event.clientX, event.clientY));
|
||||
item && item.checked && item.checked(true);
|
||||
const uids = MessageUserStore.listCheckedOrSelectedUidsWithSubMails();
|
||||
const uids = MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails();
|
||||
item && !uids.includes(item.uid) && uids.push(item.uid);
|
||||
return uids.length ? {
|
||||
copy: event.ctrlKey,
|
||||
|
|
@ -439,34 +466,24 @@ export class MailMessageList extends AbstractViewRight {
|
|||
} : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} sFolderFullName
|
||||
* @param {number} iSetAction
|
||||
* @param {Array=} aMessages = null
|
||||
* @returns {void}
|
||||
*/
|
||||
setAction(sFolderFullName, iSetAction, aMessages) {
|
||||
rl.app.messageListAction(sFolderFullName, iSetAction, aMessages);
|
||||
}
|
||||
|
||||
listSetSeen() {
|
||||
this.setAction(
|
||||
listAction(
|
||||
FolderUserStore.currentFolderFullName(),
|
||||
MessageSetAction.SetSeen,
|
||||
MessageUserStore.listCheckedOrSelected()
|
||||
MessagelistUserStore.listCheckedOrSelected()
|
||||
);
|
||||
}
|
||||
|
||||
listSetAllSeen() {
|
||||
let sFolderFullName = FolderUserStore.currentFolderFullName(),
|
||||
iThreadUid = MessageUserStore.listEndThreadUid();
|
||||
iThreadUid = MessagelistUserStore.endThreadUid();
|
||||
if (sFolderFullName) {
|
||||
let cnt = 0;
|
||||
const uids = [];
|
||||
|
||||
let folder = getFolderFromCacheList(sFolderFullName);
|
||||
if (folder) {
|
||||
MessageUserStore.list.forEach(message => {
|
||||
MessagelistUserStore.forEach(message => {
|
||||
if (message.isUnseen()) {
|
||||
++cnt;
|
||||
}
|
||||
|
|
@ -486,47 +503,47 @@ export class MailMessageList extends AbstractViewRight {
|
|||
|
||||
Remote.messageSetSeenToAll(sFolderFullName, true, iThreadUid ? uids : null);
|
||||
|
||||
MessageUserStore.reloadFlagsAndCachedMessage();
|
||||
MessagelistUserStore.reloadFlagsAndCachedMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
listUnsetSeen() {
|
||||
this.setAction(
|
||||
listAction(
|
||||
FolderUserStore.currentFolderFullName(),
|
||||
MessageSetAction.UnsetSeen,
|
||||
MessageUserStore.listCheckedOrSelected()
|
||||
MessagelistUserStore.listCheckedOrSelected()
|
||||
);
|
||||
}
|
||||
|
||||
listSetFlags() {
|
||||
this.setAction(
|
||||
listAction(
|
||||
FolderUserStore.currentFolderFullName(),
|
||||
MessageSetAction.SetFlag,
|
||||
MessageUserStore.listCheckedOrSelected()
|
||||
MessagelistUserStore.listCheckedOrSelected()
|
||||
);
|
||||
}
|
||||
|
||||
listUnsetFlags() {
|
||||
this.setAction(
|
||||
listAction(
|
||||
FolderUserStore.currentFolderFullName(),
|
||||
MessageSetAction.UnsetFlag,
|
||||
MessageUserStore.listCheckedOrSelected()
|
||||
MessagelistUserStore.listCheckedOrSelected()
|
||||
);
|
||||
}
|
||||
|
||||
flagMessages(currentMessage) {
|
||||
const checked = MessageUserStore.listCheckedOrSelected();
|
||||
const checked = MessagelistUserStore.listCheckedOrSelected();
|
||||
if (currentMessage) {
|
||||
const checkedUids = checked.map(message => message.uid);
|
||||
if (checkedUids.includes(currentMessage.uid)) {
|
||||
this.setAction(
|
||||
listAction(
|
||||
currentMessage.folder,
|
||||
currentMessage.isFlagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag,
|
||||
checked
|
||||
);
|
||||
} else {
|
||||
this.setAction(
|
||||
listAction(
|
||||
currentMessage.folder,
|
||||
currentMessage.isFlagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag,
|
||||
[currentMessage]
|
||||
|
|
@ -536,17 +553,17 @@ export class MailMessageList extends AbstractViewRight {
|
|||
}
|
||||
|
||||
flagMessagesFast(bFlag) {
|
||||
const checked = MessageUserStore.listCheckedOrSelected();
|
||||
const checked = MessagelistUserStore.listCheckedOrSelected();
|
||||
if (checked.length) {
|
||||
if (undefined === bFlag) {
|
||||
const flagged = checked.filter(message => message.isFlagged());
|
||||
this.setAction(
|
||||
listAction(
|
||||
checked[0].folder,
|
||||
checked.length === flagged.length ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag,
|
||||
checked
|
||||
);
|
||||
} else {
|
||||
this.setAction(
|
||||
listAction(
|
||||
checked[0].folder,
|
||||
!bFlag ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag,
|
||||
checked
|
||||
|
|
@ -556,17 +573,17 @@ export class MailMessageList extends AbstractViewRight {
|
|||
}
|
||||
|
||||
seenMessagesFast(seen) {
|
||||
const checked = MessageUserStore.listCheckedOrSelected();
|
||||
const checked = MessagelistUserStore.listCheckedOrSelected();
|
||||
if (checked.length) {
|
||||
if (undefined === seen) {
|
||||
const unseen = checked.filter(message => message.isUnseen());
|
||||
this.setAction(
|
||||
listAction(
|
||||
checked[0].folder,
|
||||
unseen.length ? MessageSetAction.SetSeen : MessageSetAction.UnsetSeen,
|
||||
checked
|
||||
);
|
||||
} else {
|
||||
this.setAction(
|
||||
listAction(
|
||||
checked[0].folder,
|
||||
seen ? MessageSetAction.SetSeen : MessageSetAction.UnsetSeen,
|
||||
checked
|
||||
|
|
@ -580,28 +597,28 @@ export class MailMessageList extends AbstractViewRight {
|
|||
mailBox(
|
||||
FolderUserStore.currentFolderFullNameHash(),
|
||||
page.value,
|
||||
MessageUserStore.listSearch(),
|
||||
MessageUserStore.listThreadUid()
|
||||
MessagelistUserStore.listSearch(),
|
||||
MessagelistUserStore.threadUid()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
gotoThread(message) {
|
||||
if (message && 0 < message.threadsLen()) {
|
||||
MessageUserStore.listPageBeforeThread(MessageUserStore.listPage());
|
||||
MessagelistUserStore.pageBeforeThread(MessagelistUserStore.page());
|
||||
|
||||
rl.route.setHash(
|
||||
mailBox(FolderUserStore.currentFolderFullNameHash(), 1, MessageUserStore.listSearch(), message.uid)
|
||||
mailBox(FolderUserStore.currentFolderFullNameHash(), 1, MessagelistUserStore.listSearch(), message.uid)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
listEmptyMessage() {
|
||||
if (!this.dragOver()
|
||||
&& !MessageUserStore.list().length
|
||||
&& !MessageUserStore.listIsLoading()
|
||||
&& !MessageUserStore.listError()) {
|
||||
return i18n('MESSAGE_LIST/EMPTY_' + (MessageUserStore.listSearch() ? 'SEARCH_' : '') + 'LIST');
|
||||
&& !MessagelistUserStore().length
|
||||
&& !MessagelistUserStore.isLoading()
|
||||
&& !MessagelistUserStore.error()) {
|
||||
return i18n('MESSAGE_LIST/EMPTY_' + (MessagelistUserStore.listSearch() ? 'SEARCH_' : '') + 'LIST');
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
|
@ -609,9 +626,9 @@ export class MailMessageList extends AbstractViewRight {
|
|||
clearListIsVisible() {
|
||||
return (
|
||||
!this.messageListSearchDesc() &&
|
||||
!MessageUserStore.listError() &&
|
||||
!MessageUserStore.listEndThreadUid() &&
|
||||
MessageUserStore.list().length &&
|
||||
!MessagelistUserStore.error() &&
|
||||
!MessagelistUserStore.endThreadUid() &&
|
||||
MessagelistUserStore().length &&
|
||||
(this.isSpamFolder() || this.isTrashFolder())
|
||||
);
|
||||
}
|
||||
|
|
@ -668,13 +685,13 @@ export class MailMessageList extends AbstractViewRight {
|
|||
.on('onBodyDragLeave', () => this.dragOver(false))
|
||||
.on('onSelect', (sUid, oData) => {
|
||||
if (sUid && oData && 'message/rfc822' === oData.Type) {
|
||||
MessageUserStore.listLoading(true);
|
||||
MessagelistUserStore.loading(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
})
|
||||
.on('onComplete', () => rl.app.reloadMessageList(true, true));
|
||||
.on('onComplete', () => MessagelistUserStore.reload(true, true));
|
||||
}
|
||||
|
||||
// initShortcuts
|
||||
|
|
@ -694,12 +711,12 @@ export class MailMessageList extends AbstractViewRight {
|
|||
|
||||
// delete
|
||||
shortcuts.add('delete', 'shift', Scope.MessageList, () => {
|
||||
MessageUserStore.listCheckedOrSelected().length && this.deleteWithoutMoveCommand();
|
||||
MessagelistUserStore.listCheckedOrSelected().length && this.deleteWithoutMoveCommand();
|
||||
return false;
|
||||
});
|
||||
// shortcuts.add('3', 'shift', Scope.MessageList, () => {
|
||||
shortcuts.add('delete', '', Scope.MessageList, () => {
|
||||
MessageUserStore.listCheckedOrSelected().length && this.deleteCommand();
|
||||
MessagelistUserStore.listCheckedOrSelected().length && this.deleteCommand();
|
||||
return false;
|
||||
});
|
||||
|
||||
|
|
@ -728,9 +745,9 @@ export class MailMessageList extends AbstractViewRight {
|
|||
});
|
||||
|
||||
shortcuts.add('t', '', [Scope.MessageList], () => {
|
||||
let message = MessageUserStore.selectorMessageSelected();
|
||||
let message = MessagelistUserStore.selectedMessage();
|
||||
if (!message) {
|
||||
message = MessageUserStore.selectorMessageFocused();
|
||||
message = MessagelistUserStore.focusedMessage();
|
||||
}
|
||||
|
||||
if (message && 0 < message.threadsLen()) {
|
||||
|
|
@ -781,7 +798,7 @@ export class MailMessageList extends AbstractViewRight {
|
|||
if (this.messageListSearchDesc()) {
|
||||
this.cancelSearch();
|
||||
return false;
|
||||
} else if (MessageUserStore.listEndThreadUid()) {
|
||||
} else if (MessagelistUserStore.endThreadUid()) {
|
||||
this.cancelThreadUid();
|
||||
return false;
|
||||
}
|
||||
|
|
@ -813,7 +830,7 @@ export class MailMessageList extends AbstractViewRight {
|
|||
|
||||
prefetchNextTick() {
|
||||
if (!this.bPrefetch && !ifvisible.now() && !this.viewModelDom.hidden) {
|
||||
const message = MessageUserStore.list.find(
|
||||
const message = MessagelistUserStore.find(
|
||||
item => item && !hasRequestedMessage(item.folder, item.uid)
|
||||
);
|
||||
if (message) {
|
||||
|
|
@ -838,7 +855,7 @@ export class MailMessageList extends AbstractViewRight {
|
|||
|
||||
advancedSearchClick() {
|
||||
SettingsCapa(Capa.SearchAdv)
|
||||
&& showScreenPopup(AdvancedSearchPopupView, [MessageUserStore.mainMessageListSearch()]);
|
||||
&& showScreenPopup(AdvancedSearchPopupView, [MessagelistUserStore.mainSearch()]);
|
||||
}
|
||||
|
||||
quotaTooltip() {
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ import { SettingsUserStore } from 'Stores/User/Settings';
|
|||
import { AccountUserStore } from 'Stores/User/Account';
|
||||
import { FolderUserStore } from 'Stores/User/Folder';
|
||||
import { MessageUserStore } from 'Stores/User/Message';
|
||||
import { MessagelistUserStore } from 'Stores/User/Messagelist';
|
||||
import { ThemeStore } from 'Stores/Theme';
|
||||
|
||||
import * as Local from 'Storage/Client';
|
||||
|
|
@ -66,10 +67,7 @@ export class MailMessageView extends AbstractViewRight {
|
|||
|
||||
const
|
||||
createCommandReplyHelper = type =>
|
||||
createCommand(() => {
|
||||
this.lastReplyAction(type);
|
||||
this.replyOrforward(type);
|
||||
}, this.canBeRepliedOrForwarded),
|
||||
createCommand(() => this.replyOrforward(type), this.canBeRepliedOrForwarded),
|
||||
|
||||
createCommandActionHelper = (folderType, useFolder) =>
|
||||
createCommand(() => {
|
||||
|
|
@ -101,13 +99,12 @@ export class MailMessageView extends AbstractViewRight {
|
|||
this.attachmentsActions = ko.observableArray(arrayLength(attachmentsActions) ? attachmentsActions : []);
|
||||
|
||||
this.message = MessageUserStore.message;
|
||||
this.hasCheckedMessages = MessageUserStore.hasCheckedMessages;
|
||||
this.messageLoadingThrottle = MessageUserStore.messageLoading;
|
||||
this.messagesBodiesDom = MessageUserStore.messagesBodiesDom;
|
||||
this.messageActiveDom = MessageUserStore.messageActiveDom;
|
||||
this.messageError = MessageUserStore.messageError;
|
||||
this.hasCheckedMessages = MessagelistUserStore.hasCheckedMessages;
|
||||
this.messageLoadingThrottle = MessageUserStore.loading;
|
||||
this.messagesBodiesDom = MessageUserStore.bodiesDom;
|
||||
this.messageError = MessageUserStore.error;
|
||||
|
||||
this.fullScreenMode = MessageUserStore.messageFullScreenMode;
|
||||
this.fullScreenMode = MessageUserStore.fullScreen;
|
||||
|
||||
this.messageListOfThreadsLoading = ko.observable(false).extend({ rateLimit: 1 });
|
||||
this.highlightUnselectedAttachments = ko.observable(false).extend({ falseTimeout: 2000 });
|
||||
|
|
@ -148,7 +145,7 @@ export class MailMessageView extends AbstractViewRight {
|
|||
)
|
||||
},
|
||||
|
||||
messageVisibility: () => !MessageUserStore.messageLoading() && !!currentMessage(),
|
||||
messageVisibility: () => !MessageUserStore.loading() && !!currentMessage(),
|
||||
|
||||
canBeRepliedOrForwarded: () => !this.isDraftFolder() && this.messageVisibility(),
|
||||
|
||||
|
|
@ -177,7 +174,7 @@ export class MailMessageView extends AbstractViewRight {
|
|||
pgpSupported: () => currentMessage() && PgpUserStore.isSupported(),
|
||||
|
||||
messageListOrViewLoading:
|
||||
() => MessageUserStore.listIsLoading() | MessageUserStore.messageLoading()
|
||||
() => MessagelistUserStore.isLoading() | MessageUserStore.loading()
|
||||
});
|
||||
|
||||
this.addSubscribables({
|
||||
|
|
@ -187,7 +184,7 @@ export class MailMessageView extends AbstractViewRight {
|
|||
lastReplyAction_: value => Local.set(ClientSideKeyName.LastReplyAction, value),
|
||||
|
||||
message: message => {
|
||||
this.messageActiveDom(null);
|
||||
MessageUserStore.activeDom(null);
|
||||
|
||||
if (message) {
|
||||
this.showAttachmentControls(false);
|
||||
|
|
@ -206,7 +203,7 @@ export class MailMessageView extends AbstractViewRight {
|
|||
this.viewFromDkimData(message.fromDkimData());
|
||||
this.viewToShort(message.toToLine(true, true));
|
||||
} else {
|
||||
MessageUserStore.selectorMessageSelected(null);
|
||||
MessagelistUserStore.selectedMessage(null);
|
||||
|
||||
this.viewHash = '';
|
||||
|
||||
|
|
@ -272,6 +269,7 @@ export class MailMessageView extends AbstractViewRight {
|
|||
* @returns {void}
|
||||
*/
|
||||
replyOrforward(sType) {
|
||||
this.lastReplyAction(sType);
|
||||
showMessageComposer([sType, currentMessage()]);
|
||||
}
|
||||
|
||||
|
|
@ -323,7 +321,7 @@ export class MailMessageView extends AbstractViewRight {
|
|||
|
||||
if (eqs(event, '.messageItemHeader .subjectParent .flagParent')) {
|
||||
const message = currentMessage();
|
||||
message && rl.app.messageListAction(
|
||||
message && MessagelistUserStore.setAction(
|
||||
message.folder,
|
||||
message.isFlagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag,
|
||||
[message]
|
||||
|
|
@ -551,7 +549,7 @@ export class MailMessageView extends AbstractViewRight {
|
|||
* @returns {string}
|
||||
*/
|
||||
printableCheckedMessageCount() {
|
||||
const cnt = MessageUserStore.listCheckedOrSelectedUidsWithSubMails().length;
|
||||
const cnt = MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails().length;
|
||||
return 0 < cnt ? (100 > cnt ? cnt : '99+') : '';
|
||||
}
|
||||
|
||||
|
|
@ -575,7 +573,7 @@ export class MailMessageView extends AbstractViewRight {
|
|||
|
||||
MessageFlagsCache.store(oMessage);
|
||||
|
||||
MessageUserStore.reloadFlagsAndCachedMessage();
|
||||
MessagelistUserStore.reloadFlagsAndCachedMessage();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,12 +72,12 @@ export class SystemDropDownUserView extends AbstractViewRight {
|
|||
// MessageUserStore.setMessage();
|
||||
// MessageUserStore.purgeMessageBodyCache();
|
||||
// MessageUserStore.hideMessageBodies();
|
||||
MessageUserStore.list([]);
|
||||
MessagelistUserStore([]);
|
||||
// FolderUserStore.folderList([]);
|
||||
Remote.foldersReload(value => {
|
||||
loadFolders(value => {
|
||||
if (value) {
|
||||
// 4. Change to INBOX = reload MessageList
|
||||
// MessageUserStore.setMessageList();
|
||||
// MessagelistUserStore.setMessageList();
|
||||
}
|
||||
});
|
||||
AccountUserStore.loading(false);
|
||||
|
|
@ -126,7 +126,7 @@ export class SystemDropDownUserView extends AbstractViewRight {
|
|||
onBuild() {
|
||||
shortcuts.add('m,contextmenu', '', [Scope.MessageList, Scope.MessageView, Scope.Settings], () => {
|
||||
if (!this.viewModelDom.hidden) {
|
||||
MessageUserStore.messageFullScreenMode(false);
|
||||
MessageUserStore.fullScreen(false);
|
||||
this.accountMenuDropdownTrigger(true);
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue