2016-08-17 06:01:20 +08:00
|
|
|
|
import ko from 'ko';
|
|
|
|
|
|
|
|
|
|
import {
|
2019-07-05 03:19:24 +08:00
|
|
|
|
Capa,
|
2021-03-16 23:06:16 +08:00
|
|
|
|
Scope
|
2021-01-25 05:58:06 +08:00
|
|
|
|
} from 'Common/Enums';
|
|
|
|
|
|
|
|
|
|
import {
|
2019-07-05 03:19:24 +08:00
|
|
|
|
ComposeType,
|
|
|
|
|
FolderType,
|
2021-01-25 05:58:06 +08:00
|
|
|
|
MessageSetAction
|
|
|
|
|
} from 'Common/EnumsUser';
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2019-07-05 03:19:24 +08:00
|
|
|
|
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-03-10 18:44:48 +08:00
|
|
|
|
import { doc, leftPanelDisabled, moveAction, Settings, SettingsGet } from 'Common/Globals';
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-08-19 21:14:47 +08:00
|
|
|
|
import { computedPaginatorHelper, showMessageComposer, folderListOptionsBuilder } from 'Common/UtilsUser';
|
2021-02-17 21:40:21 +08:00
|
|
|
|
import { FileInfo } from 'Common/File';
|
2019-07-05 03:19:24 +08:00
|
|
|
|
|
2021-02-04 18:25:00 +08:00
|
|
|
|
import { mailBox, serverRequest } from 'Common/Links';
|
2019-07-05 03:19:24 +08:00
|
|
|
|
import { Selector } from 'Common/Selector';
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2019-07-05 03:19:24 +08:00
|
|
|
|
import { i18n, initOnStartOrLangChange } from 'Common/Translator';
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
|
|
|
|
import {
|
2019-07-05 03:19:24 +08:00
|
|
|
|
getFolderFromCacheList,
|
2020-10-25 20:50:26 +08:00
|
|
|
|
MessageFlagsCache,
|
2019-07-05 03:19:24 +08:00
|
|
|
|
hasRequestedMessage,
|
|
|
|
|
addRequestedMessage
|
2016-08-17 06:01:20 +08:00
|
|
|
|
} from 'Common/Cache';
|
|
|
|
|
|
2021-03-11 05:41:35 +08:00
|
|
|
|
import { AppUserStore } from 'Stores/User/App';
|
|
|
|
|
import { SettingsUserStore } from 'Stores/User/Settings';
|
|
|
|
|
import { FolderUserStore } from 'Stores/User/Folder';
|
|
|
|
|
import { MessageUserStore } from 'Stores/User/Message';
|
2021-02-17 03:12:23 +08:00
|
|
|
|
import { ThemeStore } from 'Stores/Theme';
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2020-09-15 01:40:56 +08:00
|
|
|
|
import Remote from 'Remote/User/Fetch';
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-09-22 19:37:12 +08:00
|
|
|
|
import { decorateKoCommands, showScreenPopup, arePopupsVisible } from 'Knoin/Knoin';
|
2021-01-24 17:25:23 +08:00
|
|
|
|
import { AbstractViewRight } from 'Knoin/AbstractViews';
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-01-26 05:00:13 +08:00
|
|
|
|
import { FolderClearPopupView } from 'View/Popup/FolderClear';
|
|
|
|
|
import { AdvancedSearchPopupView } from 'View/Popup/AdvancedSearch';
|
|
|
|
|
|
2020-08-07 22:28:30 +08:00
|
|
|
|
const
|
2021-03-11 05:41:35 +08:00
|
|
|
|
canBeMovedHelper = () => MessageUserStore.hasCheckedOrSelected();
|
2016-09-03 07:19:37 +08:00
|
|
|
|
|
2021-09-23 15:41:02 +08:00
|
|
|
|
export class MailMessageList extends AbstractViewRight {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
constructor() {
|
2021-09-23 15:41:02 +08:00
|
|
|
|
super('MailMessageList');
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
|
|
|
|
this.bPrefetch = false;
|
|
|
|
|
this.emptySubjectValue = '';
|
|
|
|
|
|
2021-07-19 17:57:47 +08:00
|
|
|
|
this.iGoToUpOrDownTimeout = 0;
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-03-10 18:44:48 +08:00
|
|
|
|
this.newMoveToFolder = !!SettingsGet('NewMoveToFolder');
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-03-10 18:43:23 +08:00
|
|
|
|
this.allowSearch = Settings.capa(Capa.Search);
|
|
|
|
|
this.allowSearchAdv = Settings.capa(Capa.SearchAdv);
|
|
|
|
|
this.allowDangerousActions = Settings.capa(Capa.DangerousActions);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-03-12 23:54:37 +08:00
|
|
|
|
this.messageList = MessageUserStore.list;
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-11-03 09:28:01 +08:00
|
|
|
|
this.sortSupported = ko.computed(() =>
|
|
|
|
|
FolderUserStore.hasCapability('SORT') | FolderUserStore.hasCapability('ESORT')
|
|
|
|
|
);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-03-11 05:41:35 +08:00
|
|
|
|
this.composeInEdit = AppUserStore.composeInEdit;
|
2021-11-06 19:27:37 +08:00
|
|
|
|
|
|
|
|
|
this.isMobile = ThemeStore.isMobile;
|
2016-08-17 06:01:20 +08:00
|
|
|
|
this.leftPanelDisabled = leftPanelDisabled;
|
|
|
|
|
|
2021-03-12 23:54:37 +08:00
|
|
|
|
this.messageListSearch = MessageUserStore.listSearch;
|
|
|
|
|
this.messageListError = MessageUserStore.listError;
|
2021-09-03 22:37:20 +08:00
|
|
|
|
|
2021-09-22 19:37:12 +08:00
|
|
|
|
this.popupVisibility = arePopupsVisible;
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-03-11 05:41:35 +08:00
|
|
|
|
this.useCheckboxesInList = SettingsUserStore.useCheckboxesInList;
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-03-12 23:54:37 +08:00
|
|
|
|
this.messageListEndThreadUid = MessageUserStore.listEndThreadUid;
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-12-16 02:02:36 +08:00
|
|
|
|
this.messageListIsLoading = MessageUserStore.listIsLoading;
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2020-09-03 18:51:15 +08:00
|
|
|
|
initOnStartOrLangChange(() => this.emptySubjectValue = i18n('MESSAGE_LIST/EMPTY_SUBJECT_TEXT'));
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2021-11-01 23:26:07 +08:00
|
|
|
|
this.userUsageProc = FolderUserStore.quotaPercentage;
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2020-10-26 19:54:03 +08:00
|
|
|
|
this.addObservables({
|
|
|
|
|
moveDropdownTrigger: false,
|
|
|
|
|
moreDropdownTrigger: false,
|
2021-03-27 07:57:04 +08:00
|
|
|
|
sortDropdownTrigger: false,
|
2020-10-26 19:54:03 +08:00
|
|
|
|
|
|
|
|
|
dragOverArea: null,
|
|
|
|
|
dragOverBodyArea: null,
|
|
|
|
|
|
|
|
|
|
inputMessageListSearchFocus: false
|
|
|
|
|
});
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
|
|
|
|
// append drag and drop
|
2021-03-25 04:26:40 +08:00
|
|
|
|
this.dragOver = ko.observable(false).extend({ throttle: 1 });
|
|
|
|
|
this.dragOverEnter = ko.observable(false).extend({ throttle: 1 });
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2020-10-26 19:54:03 +08:00
|
|
|
|
this.sLastSearchValue = '';
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2020-10-26 19:54:03 +08:00
|
|
|
|
this.addComputables({
|
2021-09-22 19:37:12 +08:00
|
|
|
|
|
|
|
|
|
folderMenuForMove: () =>
|
|
|
|
|
folderListOptionsBuilder(
|
2021-11-30 17:19:43 +08:00
|
|
|
|
[FolderUserStore.currentFolderFullName()],
|
2021-09-22 19:37:12 +08:00
|
|
|
|
[],
|
|
|
|
|
item => item ? item.localName() : ''
|
|
|
|
|
),
|
|
|
|
|
|
2020-10-26 19:54:03 +08:00
|
|
|
|
messageListSearchDesc: () => {
|
2021-03-12 23:54:37 +08:00
|
|
|
|
const value = MessageUserStore.listEndSearch();
|
2021-03-25 04:26:40 +08:00
|
|
|
|
return value ? i18n('MESSAGE_LIST/SEARCH_RESULT_FOR', { SEARCH: value }) : ''
|
2020-10-26 19:54:03 +08:00
|
|
|
|
},
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2021-03-12 23:54:37 +08:00
|
|
|
|
messageListPaginator: computedPaginatorHelper(MessageUserStore.listPage,
|
|
|
|
|
MessageUserStore.listPageCount),
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2020-10-26 19:54:03 +08:00
|
|
|
|
checkAll: {
|
2021-03-12 23:54:37 +08:00
|
|
|
|
read: () => 0 < MessageUserStore.listChecked().length,
|
2020-10-26 19:54:03 +08:00
|
|
|
|
write: (value) => {
|
|
|
|
|
value = !!value;
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.list.forEach(message => message.checked(value));
|
2020-10-26 19:54:03 +08:00
|
|
|
|
}
|
|
|
|
|
},
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2020-10-26 19:54:03 +08:00
|
|
|
|
inputProxyMessageListSearch: {
|
2021-03-30 17:48:22 +08:00
|
|
|
|
read: MessageUserStore.mainMessageListSearch,
|
2020-10-26 19:54:03 +08:00
|
|
|
|
write: value => this.sLastSearchValue = value
|
|
|
|
|
},
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2020-10-26 19:54:03 +08:00
|
|
|
|
isIncompleteChecked: () => {
|
2021-03-12 23:54:37 +08:00
|
|
|
|
const c = MessageUserStore.listChecked().length;
|
|
|
|
|
return c && MessageUserStore.list.length > c;
|
2020-10-26 19:54:03 +08:00
|
|
|
|
},
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2021-03-30 17:48:22 +08:00
|
|
|
|
hasMessages: () => 0 < MessageUserStore.list.length,
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2021-03-30 17:48:22 +08:00
|
|
|
|
isSpamFolder: () => (FolderUserStore.spamFolder() || 0) === MessageUserStore.listEndFolder(),
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2021-03-11 05:41:35 +08:00
|
|
|
|
isSpamDisabled: () => UNUSED_OPTION_VALUE === FolderUserStore.spamFolder(),
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2021-03-30 17:48:22 +08:00
|
|
|
|
isTrashFolder: () => (FolderUserStore.trashFolder() || 0) === MessageUserStore.listEndFolder(),
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2021-12-01 20:54:35 +08:00
|
|
|
|
isDraftFolder: () => (FolderUserStore.draftsFolder() || 0) === MessageUserStore.listEndFolder(),
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-03-30 17:48:22 +08:00
|
|
|
|
isSentFolder: () => (FolderUserStore.sentFolder() || 0) === MessageUserStore.listEndFolder(),
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-03-30 17:48:22 +08:00
|
|
|
|
isArchiveFolder: () => (FolderUserStore.archiveFolder() || 0) === MessageUserStore.listEndFolder(),
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-03-11 05:41:35 +08:00
|
|
|
|
isArchiveDisabled: () => UNUSED_OPTION_VALUE === FolderUserStore.archiveFolder(),
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2020-10-26 19:54:03 +08:00
|
|
|
|
isArchiveVisible: () => !this.isArchiveFolder() && !this.isArchiveDisabled() && !this.isDraftFolder(),
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2020-10-26 19:54:03 +08:00
|
|
|
|
isSpamVisible: () =>
|
|
|
|
|
!this.isSpamFolder() && !this.isSpamDisabled() && !this.isDraftFolder() && !this.isSentFolder(),
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2020-10-26 19:54:03 +08:00
|
|
|
|
isUnSpamVisible: () =>
|
|
|
|
|
this.isSpamFolder() && !this.isSpamDisabled() && !this.isDraftFolder() && !this.isSentFolder(),
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-03-12 23:54:37 +08:00
|
|
|
|
mobileCheckedStateShow: () => ThemeStore.isMobile() ? 0 < MessageUserStore.listChecked().length : true,
|
2016-06-16 07:36:44 +08:00
|
|
|
|
|
2021-03-12 23:54:37 +08:00
|
|
|
|
mobileCheckedStateHide: () => ThemeStore.isMobile() ? !MessageUserStore.listChecked().length : true,
|
2015-07-07 02:46:44 +08:00
|
|
|
|
|
2021-03-27 07:57:04 +08:00
|
|
|
|
sortText: () => {
|
2021-03-30 04:05:35 +08:00
|
|
|
|
let mode = FolderUserStore.sortMode(),
|
|
|
|
|
desc = '' === mode || mode.includes('REVERSE');
|
2021-03-27 23:02:48 +08:00
|
|
|
|
mode = mode.split(/\s+/);
|
2021-03-30 04:05:35 +08:00
|
|
|
|
if (mode.includes('FROM')) {
|
|
|
|
|
return '@' + (desc ? '⬆' : '⬇');
|
|
|
|
|
}
|
|
|
|
|
if (mode.includes('SUBJECT')) {
|
|
|
|
|
return '𝐒' + (desc ? '⬆' : '⬇');
|
|
|
|
|
}
|
|
|
|
|
return (mode.includes('SIZE') ? '✉' : '📅') + (desc ? '⬇' : '⬆');
|
2021-03-27 07:57:04 +08:00
|
|
|
|
}
|
2020-10-26 19:54:03 +08:00
|
|
|
|
});
|
|
|
|
|
|
2021-03-11 05:41:35 +08:00
|
|
|
|
this.hasCheckedOrSelectedLines = MessageUserStore.hasCheckedOrSelected,
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
|
|
|
|
this.selector = new Selector(
|
2021-03-30 17:48:22 +08:00
|
|
|
|
MessageUserStore.list,
|
|
|
|
|
MessageUserStore.selectorMessageSelected,
|
|
|
|
|
MessageUserStore.selectorMessageFocused,
|
2019-07-05 03:19:24 +08:00
|
|
|
|
'.messageListItem .actionHandle',
|
|
|
|
|
'.messageListItem .checkboxMessage',
|
|
|
|
|
'.messageListItem.focused'
|
|
|
|
|
);
|
2016-05-01 09:07:10 +08:00
|
|
|
|
|
2021-07-19 17:57:47 +08:00
|
|
|
|
this.selector.on('ItemSelect', message => MessageUserStore.selectMessage(message));
|
2016-05-01 09:07:10 +08:00
|
|
|
|
|
2021-07-19 17:57:47 +08:00
|
|
|
|
this.selector.on('MiddleClick', message => MessageUserStore.populateMessageBody(message, true));
|
2016-05-01 09:07:10 +08:00
|
|
|
|
|
2021-07-19 17:57:47 +08:00
|
|
|
|
this.selector.on('ItemGetUid', message => (message ? message.generateUid() : ''));
|
2015-04-02 02:18:15 +08:00
|
|
|
|
|
2021-07-19 17:57:47 +08:00
|
|
|
|
this.selector.on('AutoSelect', () => this.useAutoSelect());
|
|
|
|
|
|
|
|
|
|
this.selector.on('UpOrDown', v => this.goToUpOrDown(v));
|
2015-05-03 04:22:32 +08:00
|
|
|
|
|
2021-02-12 19:00:06 +08:00
|
|
|
|
addEventListener('mailbox.message-list.selector.go-down',
|
|
|
|
|
e => this.selector.newSelectPosition('ArrowDown', false, e.detail)
|
|
|
|
|
);
|
2015-04-02 02:18:15 +08:00
|
|
|
|
|
2021-02-12 19:00:06 +08:00
|
|
|
|
addEventListener('mailbox.message-list.selector.go-up',
|
|
|
|
|
e => this.selector.newSelectPosition('ArrowUp', false, e.detail)
|
|
|
|
|
);
|
2015-04-02 02:18:15 +08:00
|
|
|
|
|
2020-08-15 02:35:39 +08:00
|
|
|
|
addEventListener('mailbox.message.show', e => {
|
2021-09-10 22:28:29 +08:00
|
|
|
|
const sFolder = e.detail.Folder, iUid = e.detail.Uid;
|
2020-08-15 02:35:39 +08:00
|
|
|
|
|
2021-03-30 17:48:22 +08:00
|
|
|
|
const message = MessageUserStore.list.find(
|
2021-09-10 22:28:29 +08:00
|
|
|
|
item => item && sFolder === item.folder && iUid == item.uid
|
2019-07-05 03:19:24 +08:00
|
|
|
|
);
|
2015-04-02 02:18:15 +08:00
|
|
|
|
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if ('INBOX' === sFolder) {
|
2021-10-29 21:25:00 +08:00
|
|
|
|
rl.route.setHash(mailBox(sFolder));
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
2015-04-02 02:18:15 +08:00
|
|
|
|
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if (message) {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
this.selector.selectMessageItem(message);
|
2019-07-05 03:19:24 +08:00
|
|
|
|
} else {
|
|
|
|
|
if ('INBOX' !== sFolder) {
|
2021-10-29 21:25:00 +08:00
|
|
|
|
rl.route.setHash(mailBox(sFolder));
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
2015-04-02 02:18:15 +08:00
|
|
|
|
|
2021-09-10 22:28:29 +08:00
|
|
|
|
MessageUserStore.selectMessageByFolderAndUid(sFolder, iUid);
|
2015-04-02 02:18:15 +08:00
|
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
|
});
|
2015-04-02 02:18:15 +08:00
|
|
|
|
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listEndHash.subscribe((() =>
|
2020-08-27 21:45:47 +08:00
|
|
|
|
this.selector.scrollToFocused()
|
|
|
|
|
).throttle(50));
|
2021-02-19 19:09:20 +08:00
|
|
|
|
|
|
|
|
|
decorateKoCommands(this, {
|
|
|
|
|
clearCommand: 1,
|
|
|
|
|
reloadCommand: 1,
|
|
|
|
|
multyForwardCommand: canBeMovedHelper,
|
|
|
|
|
deleteWithoutMoveCommand: canBeMovedHelper,
|
|
|
|
|
deleteCommand: canBeMovedHelper,
|
|
|
|
|
archiveCommand: canBeMovedHelper,
|
|
|
|
|
spamCommand: canBeMovedHelper,
|
|
|
|
|
notSpamCommand: canBeMovedHelper,
|
|
|
|
|
moveCommand: canBeMovedHelper,
|
|
|
|
|
moveNewCommand: canBeMovedHelper,
|
|
|
|
|
});
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
2015-02-25 23:29:34 +08:00
|
|
|
|
|
2021-03-27 07:57:04 +08:00
|
|
|
|
changeSort(self, event) {
|
|
|
|
|
FolderUserStore.sortMode(event.target.closest('li').dataset.sort);
|
|
|
|
|
this.reloadCommand();
|
|
|
|
|
}
|
|
|
|
|
|
2016-09-03 07:19:37 +08:00
|
|
|
|
clearCommand() {
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if (Settings.capa(Capa.DangerousActions)) {
|
2021-03-11 05:41:35 +08:00
|
|
|
|
showScreenPopup(FolderClearPopupView, [FolderUserStore.currentFolder()]);
|
2016-09-03 07:19:37 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
reloadCommand() {
|
2021-12-16 02:02:36 +08:00
|
|
|
|
if (!MessageUserStore.listIsLoading()) {
|
2020-09-15 15:29:25 +08:00
|
|
|
|
rl.app.reloadMessageList(false, true);
|
2016-09-03 07:19:37 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
multyForwardCommand() {
|
2021-03-10 18:43:23 +08:00
|
|
|
|
showMessageComposer([
|
|
|
|
|
ComposeType.ForwardAsAttachment,
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listCheckedOrSelected()
|
2021-03-10 18:43:23 +08:00
|
|
|
|
]);
|
2016-09-03 07:19:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
deleteWithoutMoveCommand() {
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if (Settings.capa(Capa.DangerousActions)) {
|
2020-09-15 15:29:25 +08:00
|
|
|
|
rl.app.deleteMessagesFromFolder(
|
2019-07-05 03:19:24 +08:00
|
|
|
|
FolderType.Trash,
|
2021-11-30 17:19:43 +08:00
|
|
|
|
FolderUserStore.currentFolderFullName(),
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
2019-07-05 03:19:24 +08:00
|
|
|
|
false
|
|
|
|
|
);
|
2016-09-03 07:19:37 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
deleteCommand() {
|
2020-09-15 15:29:25 +08:00
|
|
|
|
rl.app.deleteMessagesFromFolder(
|
2019-07-05 03:19:24 +08:00
|
|
|
|
FolderType.Trash,
|
2021-11-30 17:19:43 +08:00
|
|
|
|
FolderUserStore.currentFolderFullName(),
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
2019-07-05 03:19:24 +08:00
|
|
|
|
true
|
|
|
|
|
);
|
2016-09-03 07:19:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
archiveCommand() {
|
2020-09-15 15:29:25 +08:00
|
|
|
|
rl.app.deleteMessagesFromFolder(
|
2019-07-05 03:19:24 +08:00
|
|
|
|
FolderType.Archive,
|
2021-11-30 17:19:43 +08:00
|
|
|
|
FolderUserStore.currentFolderFullName(),
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
2019-07-05 03:19:24 +08:00
|
|
|
|
true
|
|
|
|
|
);
|
2016-09-03 07:19:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
spamCommand() {
|
2020-09-15 15:29:25 +08:00
|
|
|
|
rl.app.deleteMessagesFromFolder(
|
2019-07-05 03:19:24 +08:00
|
|
|
|
FolderType.Spam,
|
2021-11-30 17:19:43 +08:00
|
|
|
|
FolderUserStore.currentFolderFullName(),
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
2019-07-05 03:19:24 +08:00
|
|
|
|
true
|
|
|
|
|
);
|
2016-09-03 07:19:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
notSpamCommand() {
|
2020-09-15 15:29:25 +08:00
|
|
|
|
rl.app.deleteMessagesFromFolder(
|
2019-07-05 03:19:24 +08:00
|
|
|
|
FolderType.NotSpam,
|
2021-11-30 17:19:43 +08:00
|
|
|
|
FolderUserStore.currentFolderFullName(),
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
2019-07-05 03:19:24 +08:00
|
|
|
|
true
|
|
|
|
|
);
|
2016-09-03 07:19:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-02-19 19:09:20 +08:00
|
|
|
|
moveCommand() {}
|
2016-09-03 07:19:37 +08:00
|
|
|
|
|
2017-02-09 01:48:53 +08:00
|
|
|
|
moveNewCommand(vm, event) {
|
2020-10-13 01:46:41 +08:00
|
|
|
|
if (this.newMoveToFolder && this.mobileCheckedStateShow()) {
|
2017-02-09 01:48:53 +08:00
|
|
|
|
if (vm && event && event.preventDefault) {
|
|
|
|
|
event.preventDefault();
|
2020-09-30 20:07:03 +08:00
|
|
|
|
event.stopPropagation();
|
2017-02-09 01:48:53 +08:00
|
|
|
|
}
|
|
|
|
|
|
2020-09-30 20:07:03 +08:00
|
|
|
|
let b = moveAction();
|
2021-03-16 23:06:16 +08:00
|
|
|
|
AppUserStore.focusedState(b ? Scope.MessageList : Scope.FolderList);
|
2020-09-30 20:07:03 +08:00
|
|
|
|
moveAction(!b);
|
2017-02-09 01:48:53 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
composeClick() {
|
2021-03-10 18:43:23 +08:00
|
|
|
|
showMessageComposer();
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2021-07-19 17:57:47 +08:00
|
|
|
|
goToUpOrDown(up) {
|
2021-03-12 23:54:37 +08:00
|
|
|
|
if (MessageUserStore.listChecked().length) {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
|
|
2021-07-19 17:57:47 +08:00
|
|
|
|
clearTimeout(this.iGoToUpOrDownTimeout);
|
|
|
|
|
this.iGoToUpOrDownTimeout = setTimeout(() => {
|
2020-09-30 20:07:03 +08:00
|
|
|
|
let prev, next, temp, current;
|
2013-11-16 06:21:12 +08:00
|
|
|
|
|
2020-10-12 21:11:25 +08:00
|
|
|
|
this.messageListPaginator().find(item => {
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if (item) {
|
|
|
|
|
if (current) {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
next = item;
|
2014-08-21 23:08:34 +08:00
|
|
|
|
}
|
2014-04-09 04:59:22 +08:00
|
|
|
|
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if (item.current) {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
current = item;
|
|
|
|
|
prev = temp;
|
2014-08-21 23:08:34 +08:00
|
|
|
|
}
|
2014-04-09 04:59:22 +08:00
|
|
|
|
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if (next) {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
return true;
|
|
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
temp = item;
|
|
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
return false;
|
|
|
|
|
});
|
2016-06-30 08:02:45 +08:00
|
|
|
|
|
2021-04-07 22:35:46 +08:00
|
|
|
|
if (!SettingsUserStore.usePreviewPane() && !MessageUserStore.message()) {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
this.selector.iFocusedNextHelper = up ? -1 : 1;
|
2019-07-05 03:19:24 +08:00
|
|
|
|
} else {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
this.selector.iSelectNextHelper = up ? -1 : 1;
|
|
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
|
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if (up ? prev : next) {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
this.selector.unselect();
|
|
|
|
|
this.gotoPage(up ? prev : next);
|
|
|
|
|
}
|
2020-08-14 04:58:41 +08:00
|
|
|
|
}, 350);
|
2016-06-30 08:02:45 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
return true;
|
|
|
|
|
}
|
2013-11-16 06:21:12 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
useAutoSelect() {
|
2021-03-30 17:48:22 +08:00
|
|
|
|
return !MessageUserStore.listDisableAutoSelect()
|
|
|
|
|
&& !/is:unseen/.test(MessageUserStore.mainMessageListSearch())
|
2021-03-11 05:41:35 +08:00
|
|
|
|
&& SettingsUserStore.usePreviewPane();
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
2016-08-10 03:52:30 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
searchEnterAction() {
|
2021-03-30 17:48:22 +08:00
|
|
|
|
MessageUserStore.mainMessageListSearch(this.sLastSearchValue);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
this.inputMessageListSearchFocus(false);
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
cancelSearch() {
|
2021-03-30 17:48:22 +08:00
|
|
|
|
MessageUserStore.mainMessageListSearch('');
|
2016-08-17 06:01:20 +08:00
|
|
|
|
this.inputMessageListSearchFocus(false);
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
2015-04-21 06:39:14 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
cancelThreadUid() {
|
2020-09-17 02:35:29 +08:00
|
|
|
|
rl.route.setHash(
|
2019-07-05 03:19:24 +08:00
|
|
|
|
mailBox(
|
2021-03-11 05:41:35 +08:00
|
|
|
|
FolderUserStore.currentFolderFullNameHash(),
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listPageBeforeThread(),
|
|
|
|
|
MessageUserStore.listSearch()
|
2019-07-05 03:19:24 +08:00
|
|
|
|
)
|
|
|
|
|
);
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
2015-04-23 05:33:02 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
/**
|
2021-11-30 17:19:43 +08:00
|
|
|
|
* @param {string} sToFolderFullName
|
2016-08-17 06:01:20 +08:00
|
|
|
|
* @param {boolean} bCopy
|
|
|
|
|
* @returns {boolean}
|
|
|
|
|
*/
|
2021-11-30 17:19:43 +08:00
|
|
|
|
moveSelectedMessagesToFolder(sToFolderFullName, bCopy) {
|
2021-03-11 05:41:35 +08:00
|
|
|
|
if (MessageUserStore.hasCheckedOrSelected()) {
|
2020-09-15 15:29:25 +08:00
|
|
|
|
rl.app.moveMessagesToFolder(
|
2021-11-30 17:19:43 +08:00
|
|
|
|
FolderUserStore.currentFolderFullName(),
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
2021-11-30 17:19:43 +08:00
|
|
|
|
sToFolderFullName,
|
2019-07-05 03:19:24 +08:00
|
|
|
|
bCopy
|
|
|
|
|
);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
2014-01-26 22:23:37 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
return false;
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
2014-01-26 22:23:37 +08:00
|
|
|
|
|
2020-09-23 16:08:34 +08:00
|
|
|
|
getDragData(event) {
|
2021-01-27 07:26:31 +08:00
|
|
|
|
const item = ko.dataFor(doc.elementFromPoint(event.clientX, event.clientY));
|
2020-09-23 16:08:34 +08:00
|
|
|
|
item && item.checked && item.checked(true);
|
2021-03-12 23:54:37 +08:00
|
|
|
|
const uids = MessageUserStore.listCheckedOrSelectedUidsWithSubMails();
|
2020-09-20 17:29:31 +08:00
|
|
|
|
item && !uids.includes(item.uid) && uids.push(item.uid);
|
2020-09-23 16:08:34 +08:00
|
|
|
|
return uids.length ? {
|
|
|
|
|
copy: event.ctrlKey,
|
2021-11-30 17:19:43 +08:00
|
|
|
|
folder: FolderUserStore.currentFolderFullName(),
|
2020-09-23 16:08:34 +08:00
|
|
|
|
uids: uids
|
|
|
|
|
} : null;
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
2014-05-27 20:54:41 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
/**
|
2021-11-30 17:19:43 +08:00
|
|
|
|
* @param {string} sFolderFullName
|
2016-08-17 06:01:20 +08:00
|
|
|
|
* @param {number} iSetAction
|
|
|
|
|
* @param {Array=} aMessages = null
|
|
|
|
|
* @returns {void}
|
|
|
|
|
*/
|
2021-11-30 17:19:43 +08:00
|
|
|
|
setAction(sFolderFullName, iSetAction, aMessages) {
|
|
|
|
|
rl.app.messageListAction(sFolderFullName, iSetAction, aMessages);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-12-06 23:08:58 +08:00
|
|
|
|
listSetSeen() {
|
|
|
|
|
this.setAction(
|
|
|
|
|
FolderUserStore.currentFolderFullName(),
|
|
|
|
|
MessageSetAction.SetSeen,
|
|
|
|
|
MessageUserStore.listCheckedOrSelected()
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
listSetAllSeen() {
|
|
|
|
|
let sFolderFullName = FolderUserStore.currentFolderFullName(),
|
|
|
|
|
iThreadUid = MessageUserStore.listEndThreadUid();
|
2021-11-30 17:19:43 +08:00
|
|
|
|
if (sFolderFullName) {
|
2016-12-15 05:56:17 +08:00
|
|
|
|
let cnt = 0;
|
|
|
|
|
const uids = [];
|
|
|
|
|
|
2021-11-30 17:19:43 +08:00
|
|
|
|
let folder = getFolderFromCacheList(sFolderFullName);
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if (folder) {
|
2021-12-06 23:08:58 +08:00
|
|
|
|
MessageUserStore.list.forEach(message => {
|
|
|
|
|
if (message.isUnseen()) {
|
|
|
|
|
++cnt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
message.flags.push('\\seen');
|
|
|
|
|
// message.flags.valueHasMutated();
|
|
|
|
|
uids.push(message.uid);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (iThreadUid) {
|
|
|
|
|
folder.messageCountUnread(Math.max(0, folder.messageCountUnread() - cnt));
|
|
|
|
|
} else {
|
|
|
|
|
folder.messageCountUnread(0);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-12-06 23:08:58 +08:00
|
|
|
|
MessageFlagsCache.clearFolder(sFolderFullName);
|
|
|
|
|
|
|
|
|
|
Remote.messageSetSeenToAll(sFolderFullName, true, iThreadUid ? uids : null);
|
|
|
|
|
|
2020-09-15 15:29:25 +08:00
|
|
|
|
rl.app.reloadFlagsCurrentMessageListAndMessageFromCache();
|
2015-02-25 23:29:34 +08:00
|
|
|
|
}
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2015-02-25 23:29:34 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
listUnsetSeen() {
|
2019-07-05 03:19:24 +08:00
|
|
|
|
this.setAction(
|
2021-11-30 17:19:43 +08:00
|
|
|
|
FolderUserStore.currentFolderFullName(),
|
2019-07-05 03:19:24 +08:00
|
|
|
|
MessageSetAction.UnsetSeen,
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listCheckedOrSelected()
|
2019-07-05 03:19:24 +08:00
|
|
|
|
);
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
2014-04-09 04:59:22 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
listSetFlags() {
|
2019-07-05 03:19:24 +08:00
|
|
|
|
this.setAction(
|
2021-11-30 17:19:43 +08:00
|
|
|
|
FolderUserStore.currentFolderFullName(),
|
2019-07-05 03:19:24 +08:00
|
|
|
|
MessageSetAction.SetFlag,
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listCheckedOrSelected()
|
2019-07-05 03:19:24 +08:00
|
|
|
|
);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
listUnsetFlags() {
|
2019-07-05 03:19:24 +08:00
|
|
|
|
this.setAction(
|
2021-11-30 17:19:43 +08:00
|
|
|
|
FolderUserStore.currentFolderFullName(),
|
2019-07-05 03:19:24 +08:00
|
|
|
|
MessageSetAction.UnsetFlag,
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listCheckedOrSelected()
|
2019-07-05 03:19:24 +08:00
|
|
|
|
);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
flagMessages(currentMessage) {
|
2021-04-07 22:35:46 +08:00
|
|
|
|
const checked = MessageUserStore.listCheckedOrSelected();
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if (currentMessage) {
|
2020-07-23 02:09:31 +08:00
|
|
|
|
const checkedUids = checked.map(message => message.uid);
|
2020-07-28 18:35:41 +08:00
|
|
|
|
if (checkedUids.includes(currentMessage.uid)) {
|
2019-07-05 03:19:24 +08:00
|
|
|
|
this.setAction(
|
2020-10-23 21:15:54 +08:00
|
|
|
|
currentMessage.folder,
|
|
|
|
|
currentMessage.isFlagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag,
|
2019-07-05 03:19:24 +08:00
|
|
|
|
checked
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
this.setAction(
|
2020-10-23 21:15:54 +08:00
|
|
|
|
currentMessage.folder,
|
|
|
|
|
currentMessage.isFlagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag,
|
2019-07-05 03:19:24 +08:00
|
|
|
|
[currentMessage]
|
|
|
|
|
);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
2015-05-20 06:05:54 +08:00
|
|
|
|
}
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
2016-07-01 06:50:11 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
flagMessagesFast(bFlag) {
|
2021-04-07 22:35:46 +08:00
|
|
|
|
const checked = MessageUserStore.listCheckedOrSelected();
|
2020-07-28 18:35:41 +08:00
|
|
|
|
if (checked.length) {
|
2020-07-30 03:49:41 +08:00
|
|
|
|
if (undefined === bFlag) {
|
2020-10-23 21:15:54 +08:00
|
|
|
|
const flagged = checked.filter(message => message.isFlagged());
|
2019-07-05 03:19:24 +08:00
|
|
|
|
this.setAction(
|
2020-10-23 21:15:54 +08:00
|
|
|
|
checked[0].folder,
|
2019-07-05 03:19:24 +08:00
|
|
|
|
checked.length === flagged.length ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag,
|
|
|
|
|
checked
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
this.setAction(
|
2020-10-23 21:15:54 +08:00
|
|
|
|
checked[0].folder,
|
2019-07-05 03:19:24 +08:00
|
|
|
|
!bFlag ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag,
|
|
|
|
|
checked
|
|
|
|
|
);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
2014-04-08 05:03:58 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
seenMessagesFast(seen) {
|
2021-04-07 22:35:46 +08:00
|
|
|
|
const checked = MessageUserStore.listCheckedOrSelected();
|
2020-07-28 18:35:41 +08:00
|
|
|
|
if (checked.length) {
|
2020-07-30 03:49:41 +08:00
|
|
|
|
if (undefined === seen) {
|
2020-10-23 21:15:54 +08:00
|
|
|
|
const unseen = checked.filter(message => message.isUnseen());
|
2019-07-05 03:19:24 +08:00
|
|
|
|
this.setAction(
|
2020-10-23 21:15:54 +08:00
|
|
|
|
checked[0].folder,
|
2020-07-28 18:35:41 +08:00
|
|
|
|
unseen.length ? MessageSetAction.SetSeen : MessageSetAction.UnsetSeen,
|
2019-07-05 03:19:24 +08:00
|
|
|
|
checked
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
this.setAction(
|
2020-10-23 21:15:54 +08:00
|
|
|
|
checked[0].folder,
|
2019-07-05 03:19:24 +08:00
|
|
|
|
seen ? MessageSetAction.SetSeen : MessageSetAction.UnsetSeen,
|
|
|
|
|
checked
|
|
|
|
|
);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
2015-04-21 06:39:14 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
gotoPage(page) {
|
2020-09-17 02:35:29 +08:00
|
|
|
|
page && rl.route.setHash(
|
2020-09-03 18:51:15 +08:00
|
|
|
|
mailBox(
|
2021-03-11 05:41:35 +08:00
|
|
|
|
FolderUserStore.currentFolderFullNameHash(),
|
2020-09-03 18:51:15 +08:00
|
|
|
|
page.value,
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listSearch(),
|
|
|
|
|
MessageUserStore.listThreadUid()
|
2020-09-03 18:51:15 +08:00
|
|
|
|
)
|
|
|
|
|
);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
2015-04-21 06:39:14 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
gotoThread(message) {
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if (message && 0 < message.threadsLen()) {
|
2021-03-12 23:54:37 +08:00
|
|
|
|
MessageUserStore.listPageBeforeThread(MessageUserStore.listPage());
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2020-09-17 02:35:29 +08:00
|
|
|
|
rl.route.setHash(
|
2021-03-12 23:54:37 +08:00
|
|
|
|
mailBox(FolderUserStore.currentFolderFullNameHash(), 1, MessageUserStore.listSearch(), message.uid)
|
2020-09-17 02:35:29 +08:00
|
|
|
|
);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
2015-04-21 06:39:14 +08:00
|
|
|
|
|
2021-08-10 18:22:55 +08:00
|
|
|
|
listEmptyMessage() {
|
|
|
|
|
if (!this.dragOver()
|
|
|
|
|
&& !MessageUserStore.list().length
|
2021-12-16 02:02:36 +08:00
|
|
|
|
&& !MessageUserStore.listIsLoading()
|
2021-08-10 18:22:55 +08:00
|
|
|
|
&& !MessageUserStore.listError()) {
|
|
|
|
|
return i18n('MESSAGE_LIST/EMPTY_' + (MessageUserStore.listSearch() ? 'SEARCH_' : '') + 'LIST');
|
|
|
|
|
}
|
|
|
|
|
return '';
|
|
|
|
|
}
|
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
clearListIsVisible() {
|
2019-07-05 03:19:24 +08:00
|
|
|
|
return (
|
2020-07-28 23:20:14 +08:00
|
|
|
|
!this.messageListSearchDesc() &&
|
2021-08-10 18:22:55 +08:00
|
|
|
|
!MessageUserStore.listError() &&
|
|
|
|
|
!MessageUserStore.listEndThreadUid() &&
|
2021-08-10 17:42:21 +08:00
|
|
|
|
MessageUserStore.list().length &&
|
2019-07-05 03:19:24 +08:00
|
|
|
|
(this.isSpamFolder() || this.isTrashFolder())
|
|
|
|
|
);
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
2015-04-21 06:39:14 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
onBuild(dom) {
|
2021-11-06 19:27:37 +08:00
|
|
|
|
const eqs = (ev, s) => ev.target.closestWithin(s, dom);
|
2014-04-08 05:03:58 +08:00
|
|
|
|
|
2021-03-16 23:06:16 +08:00
|
|
|
|
this.selector.init(dom.querySelector('.b-content'), Scope.MessageList);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2020-08-30 16:30:50 +08:00
|
|
|
|
dom.addEventListener('click', event => {
|
2021-11-06 19:27:37 +08:00
|
|
|
|
ThemeStore.isMobile() && !eqs(event, '.toggleLeft') && leftPanelDisabled(true);
|
2014-04-08 05:03:58 +08:00
|
|
|
|
|
2021-11-06 19:27:37 +08:00
|
|
|
|
if (eqs(event, '.messageList') && Scope.MessageView === AppUserStore.focusedState()) {
|
2021-03-16 23:06:16 +08:00
|
|
|
|
AppUserStore.focusedState(Scope.MessageList);
|
2020-08-30 16:30:50 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-11-05 18:17:46 +08:00
|
|
|
|
let el = eqs(event, '.e-paginator a');
|
2020-08-30 16:30:50 +08:00
|
|
|
|
el && this.gotoPage(ko.dataFor(el));
|
|
|
|
|
|
2021-07-20 22:45:55 +08:00
|
|
|
|
eqs(event, '.checkboxCheckAll') && this.checkAll(!this.checkAll());
|
2020-08-30 16:30:50 +08:00
|
|
|
|
|
2021-09-10 22:28:29 +08:00
|
|
|
|
el = eqs(event, '.flagParent');
|
2020-08-30 16:30:50 +08:00
|
|
|
|
el && this.flagMessages(ko.dataFor(el));
|
|
|
|
|
|
2021-09-10 22:28:29 +08:00
|
|
|
|
el = eqs(event, '.threads-len');
|
2020-08-30 16:30:50 +08:00
|
|
|
|
el && this.gotoThread(ko.dataFor(el));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
dom.addEventListener('dblclick', event => {
|
2021-09-10 22:28:29 +08:00
|
|
|
|
let el = eqs(event, '.actionHandle');
|
2020-08-30 16:30:50 +08:00
|
|
|
|
el && this.gotoThread(ko.dataFor(el));
|
|
|
|
|
});
|
2014-04-08 05:03:58 +08:00
|
|
|
|
|
2021-08-13 02:17:37 +08:00
|
|
|
|
// initUploaderForAppend
|
|
|
|
|
|
|
|
|
|
if (Settings.app('allowAppendMessage') && this.dragOverArea()) {
|
|
|
|
|
const oJua = new Jua({
|
|
|
|
|
action: serverRequest('Append'),
|
|
|
|
|
name: 'AppendFile',
|
2021-09-14 18:50:56 +08:00
|
|
|
|
limit: 1,
|
2021-08-13 02:17:37 +08:00
|
|
|
|
hidden: {
|
2021-11-30 17:19:43 +08:00
|
|
|
|
Folder: () => FolderUserStore.currentFolderFullName()
|
2021-08-13 02:17:37 +08:00
|
|
|
|
},
|
|
|
|
|
dragAndDropElement: this.dragOverArea(),
|
|
|
|
|
dragAndDropBodyElement: this.dragOverBodyArea()
|
|
|
|
|
});
|
2014-06-03 07:22:36 +08:00
|
|
|
|
|
2021-08-13 02:17:37 +08:00
|
|
|
|
this.dragOver.subscribe(value => value && this.selector.scrollToTop());
|
|
|
|
|
|
|
|
|
|
oJua
|
|
|
|
|
.on('onDragEnter', () => this.dragOverEnter(true))
|
|
|
|
|
.on('onDragLeave', () => this.dragOverEnter(false))
|
|
|
|
|
.on('onBodyDragEnter', () => this.dragOver(true))
|
|
|
|
|
.on('onBodyDragLeave', () => this.dragOver(false))
|
|
|
|
|
.on('onSelect', (sUid, oData) => {
|
|
|
|
|
if (sUid && oData && 'message/rfc822' === oData.Type) {
|
|
|
|
|
MessageUserStore.listLoading(true);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
})
|
|
|
|
|
.on('onComplete', () => rl.app.reloadMessageList(true, true));
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2021-08-13 02:17:37 +08:00
|
|
|
|
// initShortcuts
|
|
|
|
|
|
2021-03-16 23:06:16 +08:00
|
|
|
|
shortcuts.add('enter,open', '', Scope.MessageList, () => {
|
2021-04-07 22:35:46 +08:00
|
|
|
|
if (MessageUserStore.message() && this.useAutoSelect()) {
|
2020-08-15 02:35:39 +08:00
|
|
|
|
dispatchEvent(new CustomEvent('mailbox.message-view.toggle-full-screen'));
|
2016-08-17 06:01:20 +08:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
|
});
|
2014-01-26 22:23:37 +08:00
|
|
|
|
|
2021-09-17 20:07:52 +08:00
|
|
|
|
// archive (zip)
|
|
|
|
|
shortcuts.add('z', '', [Scope.MessageList, Scope.MessageView], () => {
|
|
|
|
|
this.archiveCommand();
|
|
|
|
|
return false;
|
|
|
|
|
});
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-09-17 20:07:52 +08:00
|
|
|
|
// delete
|
|
|
|
|
shortcuts.add('delete', 'shift', Scope.MessageList, () => {
|
|
|
|
|
MessageUserStore.listCheckedOrSelected().length && this.deleteWithoutMoveCommand();
|
|
|
|
|
return false;
|
|
|
|
|
});
|
|
|
|
|
// shortcuts.add('3', 'shift', Scope.MessageList, () => {
|
|
|
|
|
shortcuts.add('delete', '', Scope.MessageList, () => {
|
|
|
|
|
MessageUserStore.listCheckedOrSelected().length && this.deleteCommand();
|
|
|
|
|
return false;
|
|
|
|
|
});
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-09-17 20:25:52 +08:00
|
|
|
|
// check mail
|
|
|
|
|
shortcuts.add('r', 'meta', [Scope.FolderList, Scope.MessageList, Scope.MessageView], () => {
|
|
|
|
|
this.reloadCommand();
|
|
|
|
|
return false;
|
|
|
|
|
});
|
2016-07-01 06:50:11 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
// check all
|
2021-03-16 23:06:16 +08:00
|
|
|
|
shortcuts.add('a', 'meta', Scope.MessageList, () => {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
this.checkAll(!(this.checkAll() && !this.isIncompleteChecked()));
|
|
|
|
|
return false;
|
|
|
|
|
});
|
2014-06-03 07:22:36 +08:00
|
|
|
|
|
2021-03-10 18:43:23 +08:00
|
|
|
|
// write/compose (open compose popup)
|
2021-03-16 23:06:16 +08:00
|
|
|
|
shortcuts.add('w,c,new', '', [Scope.MessageList, Scope.MessageView], () => {
|
2021-03-10 18:43:23 +08:00
|
|
|
|
showMessageComposer();
|
|
|
|
|
return false;
|
|
|
|
|
});
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2021-09-17 20:07:52 +08:00
|
|
|
|
// important - star/flag messages
|
|
|
|
|
shortcuts.add('i', '', [Scope.MessageList, Scope.MessageView], () => {
|
|
|
|
|
this.flagMessagesFast();
|
|
|
|
|
return false;
|
|
|
|
|
});
|
2014-06-03 07:22:36 +08:00
|
|
|
|
|
2021-03-16 23:06:16 +08:00
|
|
|
|
shortcuts.add('t', '', [Scope.MessageList], () => {
|
2021-03-30 17:48:22 +08:00
|
|
|
|
let message = MessageUserStore.selectorMessageSelected();
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if (!message) {
|
2021-03-30 17:48:22 +08:00
|
|
|
|
message = MessageUserStore.selectorMessageFocused();
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
2014-06-03 07:22:36 +08:00
|
|
|
|
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if (message && 0 < message.threadsLen()) {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
this.gotoThread(message);
|
|
|
|
|
}
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
return false;
|
|
|
|
|
});
|
|
|
|
|
|
2021-09-17 20:07:52 +08:00
|
|
|
|
// move
|
|
|
|
|
shortcuts.add('insert', '', Scope.MessageList, () => {
|
|
|
|
|
if (this.newMoveToFolder) {
|
|
|
|
|
this.moveNewCommand();
|
|
|
|
|
} else {
|
|
|
|
|
this.moveDropdownTrigger(true);
|
|
|
|
|
}
|
2017-02-09 01:48:53 +08:00
|
|
|
|
|
2021-09-17 20:07:52 +08:00
|
|
|
|
return false;
|
|
|
|
|
});
|
2016-06-30 08:02:45 +08:00
|
|
|
|
|
2021-09-17 20:07:52 +08:00
|
|
|
|
// read
|
|
|
|
|
shortcuts.add('q', '', [Scope.MessageList, Scope.MessageView], () => {
|
|
|
|
|
this.seenMessagesFast(true);
|
|
|
|
|
return false;
|
|
|
|
|
});
|
2016-06-30 08:02:45 +08:00
|
|
|
|
|
2021-09-17 20:07:52 +08:00
|
|
|
|
// unread
|
|
|
|
|
shortcuts.add('u', '', [Scope.MessageList, Scope.MessageView], () => {
|
|
|
|
|
this.seenMessagesFast(false);
|
|
|
|
|
return false;
|
|
|
|
|
});
|
2016-06-30 08:02:45 +08:00
|
|
|
|
|
2021-03-16 23:06:16 +08:00
|
|
|
|
shortcuts.add('f,mailforward', 'shift', [Scope.MessageList, Scope.MessageView], () => {
|
2021-03-10 18:43:23 +08:00
|
|
|
|
this.multyForwardCommand();
|
|
|
|
|
return false;
|
|
|
|
|
});
|
2016-06-30 08:02:45 +08:00
|
|
|
|
|
2019-07-05 03:19:24 +08:00
|
|
|
|
if (Settings.capa(Capa.Search)) {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
// search input focus
|
2021-03-16 23:06:16 +08:00
|
|
|
|
shortcuts.add('/', '', [Scope.MessageList, Scope.MessageView], () => {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
this.inputMessageListSearchFocus(true);
|
|
|
|
|
return false;
|
|
|
|
|
});
|
|
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
// cancel search
|
2021-03-16 23:06:16 +08:00
|
|
|
|
shortcuts.add('escape', '', Scope.MessageList, () => {
|
2020-07-28 23:20:14 +08:00
|
|
|
|
if (this.messageListSearchDesc()) {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
this.cancelSearch();
|
|
|
|
|
return false;
|
2021-08-10 18:22:55 +08:00
|
|
|
|
} else if (MessageUserStore.listEndThreadUid()) {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
this.cancelThreadUid();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
});
|
2013-11-16 06:21:12 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
// change focused state
|
2021-03-16 23:06:16 +08:00
|
|
|
|
shortcuts.add('tab', 'shift', Scope.MessageList, () => {
|
|
|
|
|
AppUserStore.focusedState(Scope.FolderList);
|
2020-09-26 06:02:29 +08:00
|
|
|
|
return false;
|
|
|
|
|
});
|
2021-03-16 23:06:16 +08:00
|
|
|
|
shortcuts.add('arrowleft', '', Scope.MessageList, () => {
|
|
|
|
|
AppUserStore.focusedState(Scope.FolderList);
|
2020-09-26 06:02:29 +08:00
|
|
|
|
return false;
|
|
|
|
|
});
|
2021-03-16 23:06:16 +08:00
|
|
|
|
shortcuts.add('tab,arrowright', '', Scope.MessageList, () => {
|
2021-07-22 03:54:07 +08:00
|
|
|
|
if (MessageUserStore.message()){
|
|
|
|
|
AppUserStore.focusedState(Scope.MessageView);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2016-08-17 06:01:20 +08:00
|
|
|
|
});
|
|
|
|
|
|
2021-03-16 23:06:16 +08:00
|
|
|
|
shortcuts.add('arrowleft', 'meta', Scope.MessageView, ()=>false);
|
|
|
|
|
shortcuts.add('arrowright', 'meta', Scope.MessageView, ()=>false);
|
2021-08-13 02:17:37 +08:00
|
|
|
|
|
|
|
|
|
if (!ThemeStore.isMobile() && Settings.capa(Capa.Prefetch)) {
|
|
|
|
|
ifvisible.idle(this.prefetchNextTick.bind(this));
|
|
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
2014-08-21 23:08:34 +08:00
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
prefetchNextTick() {
|
2021-09-23 02:17:44 +08:00
|
|
|
|
if (!this.bPrefetch && !ifvisible.now() && !this.viewModelDom.hidden) {
|
2021-03-30 17:48:22 +08:00
|
|
|
|
const message = MessageUserStore.list.find(
|
2020-10-23 21:15:54 +08:00
|
|
|
|
item => item && !hasRequestedMessage(item.folder, item.uid)
|
2019-07-05 03:19:24 +08:00
|
|
|
|
);
|
|
|
|
|
if (message) {
|
2016-08-17 06:01:20 +08:00
|
|
|
|
this.bPrefetch = true;
|
|
|
|
|
|
2020-10-23 21:15:54 +08:00
|
|
|
|
addRequestedMessage(message.folder, message.uid);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
2019-07-05 03:19:24 +08:00
|
|
|
|
Remote.message(
|
2021-03-18 21:48:21 +08:00
|
|
|
|
iError => {
|
|
|
|
|
const next = !iError;
|
2020-07-23 02:29:48 +08:00
|
|
|
|
setTimeout(() => {
|
2019-07-05 03:19:24 +08:00
|
|
|
|
this.bPrefetch = false;
|
2020-09-03 18:51:15 +08:00
|
|
|
|
next && this.prefetchNextTick();
|
2020-08-14 04:58:41 +08:00
|
|
|
|
}, 1000);
|
2019-07-05 03:19:24 +08:00
|
|
|
|
},
|
2020-10-23 21:15:54 +08:00
|
|
|
|
message.folder,
|
2019-07-05 03:19:24 +08:00
|
|
|
|
message.uid
|
|
|
|
|
);
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
advancedSearchClick() {
|
2020-09-03 18:51:15 +08:00
|
|
|
|
Settings.capa(Capa.SearchAdv)
|
2021-03-30 17:48:22 +08:00
|
|
|
|
&& showScreenPopup(AdvancedSearchPopupView, [MessageUserStore.mainMessageListSearch()]);
|
2016-06-30 08:02:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
2016-08-17 06:01:20 +08:00
|
|
|
|
quotaTooltip() {
|
|
|
|
|
return i18n('MESSAGE_LIST/QUOTA_SIZE', {
|
2021-11-01 23:26:07 +08:00
|
|
|
|
SIZE: FileInfo.friendlySize(FolderUserStore.quotaUsage()),
|
|
|
|
|
PROC: FolderUserStore.quotaPercentage(),
|
|
|
|
|
LIMIT: FileInfo.friendlySize(FolderUserStore.quotaLimit())
|
2021-04-07 05:03:20 +08:00
|
|
|
|
}).replace(/<[^>]+>/g, '');
|
2016-08-17 06:01:20 +08:00
|
|
|
|
}
|
|
|
|
|
}
|