snappymail/dev/Screen/User/MailBox.js

164 lines
4.9 KiB
JavaScript
Raw Normal View History

import { Scope } from 'Common/Enums';
2022-03-14 22:42:05 +08:00
import { Layout, ClientSideKeyNameMessageListSize } from 'Common/EnumsUser';
import { doc, createElement, leftPanelDisabled, Settings, elementById } from 'Common/Globals';
import { pString, pInt } from 'Common/Utils';
import { setLayoutResizer, moveAction } from 'Common/UtilsUser';
2021-11-30 17:19:43 +08:00
import { getFolderFromCacheList, getFolderFullName, getFolderInboxName } from 'Common/Cache';
import { i18n, initOnStartOrLangChange } from 'Common/Translator';
2021-11-05 17:20:06 +08:00
import { SettingsUserStore } from 'Stores/User/Settings';
2016-07-07 07:11:13 +08:00
import { AppUserStore } from 'Stores/User/App';
import { AccountUserStore } from 'Stores/User/Account';
import { FolderUserStore } from 'Stores/User/Folder';
import { MessagelistUserStore } from 'Stores/User/Messagelist';
import { ThemeStore } from 'Stores/Theme';
2016-07-07 07:11:13 +08:00
import { SystemDropDownUserView } from 'View/User/SystemDropDown';
import { MailFolderList } from 'View/User/MailBox/FolderList';
import { MailMessageList } from 'View/User/MailBox/MessageList';
import { MailMessageView } from 'View/User/MailBox/MessageView';
2019-07-05 03:19:24 +08:00
import { AbstractScreen } from 'Knoin/AbstractScreen';
2016-07-07 07:11:13 +08:00
import { MessageModel } from 'Model/Message';
import { populateMessageBody } from 'Common/UtilsUser';
2021-01-22 23:32:08 +08:00
export class MailBoxUserScreen extends AbstractScreen {
2016-07-16 05:29:42 +08:00
constructor() {
var styleSheet = createElement('style');
doc.head.appendChild(styleSheet);
initOnStartOrLangChange(() =>
styleSheet.innerText = '.subjectParent:empty::after,.subjectParent .subject:empty::after'
+'{content:"'+i18n('MESSAGE/EMPTY_SUBJECT_TEXT')+'"}'
);
2016-07-07 07:11:13 +08:00
super('mailbox', [
SystemDropDownUserView,
MailFolderList,
MailMessageList,
MailMessageView
2016-07-07 07:11:13 +08:00
]);
}
/**
* @returns {void}
*/
updateWindowTitle() {
const count = Settings.app('listPermanentFiltered') ? 0 : FolderUserStore.foldersInboxUnreadCount(),
email = AccountUserStore.email();
2016-07-07 07:11:13 +08:00
2022-11-14 16:15:25 +08:00
rl.setTitle(
(email
? '' + (0 < count ? '(' + count + ') ' : ' ') + email + ' - '
: ''
) + i18n('TITLES/MAILBOX')
2019-07-05 03:19:24 +08:00
);
2016-07-07 07:11:13 +08:00
}
/**
* @returns {void}
*/
onShow() {
this.updateWindowTitle();
2022-03-07 20:47:03 +08:00
AppUserStore.focusedState('none');
AppUserStore.focusedState(Scope.MessageList);
2016-07-07 07:11:13 +08:00
ThemeStore.isMobile() && leftPanelDisabled(true);
2016-07-07 07:11:13 +08:00
}
/**
* @param {string} folderHash
* @param {number} page
* @param {string} search
* @returns {void}
2016-07-07 07:11:13 +08:00
*/
onRoute(folderHash, page, search, messageUid) {
2021-11-30 17:19:43 +08:00
const folder = getFolderFromCacheList(getFolderFullName(folderHash.replace(/~([\d]+)$/, '')));
2019-07-05 03:19:24 +08:00
if (folder) {
FolderUserStore.currentFolder(folder);
MessagelistUserStore.page(1 > page ? 1 : page);
MessagelistUserStore.listSearch(search);
if (messageUid) {
let message = new MessageModel;
message.folder = folderHash;
message.uid = messageUid;
populateMessageBody(message);
} else {
let threadUid = folderHash.replace(/^.+~(\d+)$/, '$1');
MessagelistUserStore.threadUid((folderHash === threadUid) ? 0 : pInt(threadUid));
}
MessagelistUserStore.reload();
2016-07-07 07:11:13 +08:00
}
}
/**
* @returns {void}
*/
onStart() {
super.onStart();
addEventListener('mailbox.inbox-unread-count', e => {
FolderUserStore.foldersInboxUnreadCount(e.detail);
/* // Disabled in SystemDropDown.html
const email = AccountUserStore.email();
AccountUserStore.forEach(item =>
2022-09-02 17:52:07 +08:00
email === item?.email && item?.count(e.detail)
);
*/
this.updateWindowTitle();
});
2016-07-07 07:11:13 +08:00
}
/**
* @returns {void}
*/
onBuild() {
2021-11-05 17:20:06 +08:00
setTimeout(() => {
// initMailboxLayoutResizer
const top = elementById('V-MailMessageList'),
bottom = elementById('V-MailMessageView'),
2021-11-05 17:20:06 +08:00
fToggle = () => {
let layout = SettingsUserStore.layout();
2022-03-14 22:42:05 +08:00
setLayoutResizer(top, bottom, ClientSideKeyNameMessageListSize,
2021-11-05 17:20:06 +08:00
(ThemeStore.isMobile() || Layout.NoPreview === layout)
? 0
: (Layout.SidePreview === layout ? 'Width' : 'Height')
2021-11-05 17:20:06 +08:00
);
};
if (top && bottom) {
fToggle();
addEventListener('rl-layout', fToggle);
}
}, 1);
2017-02-09 01:48:53 +08:00
doc.addEventListener('click', event =>
event.target.closest('#rl-right') && moveAction(false)
);
2016-07-07 07:11:13 +08:00
}
/**
2021-12-08 00:22:56 +08:00
* Parse link as generated by mailBox()
2016-07-07 07:11:13 +08:00
* @returns {Array}
*/
routes() {
const
2021-12-08 00:22:56 +08:00
folder = (request, vals) => request ? pString(vals[0]) : getFolderInboxName(),
fNormS = (request, vals) => [folder(request, vals), request ? pInt(vals[1]) : 1, decodeURI(pString(vals[2]))];
2016-07-07 07:11:13 +08:00
return [
2021-12-07 23:52:05 +08:00
// Folder: INBOX | INBOX.sub | Sent | fullNameHash
[/^([^/]*)$/, { normalize_: fNormS }],
2021-12-07 23:52:05 +08:00
// Search: {folder}/{string}
[/^([a-zA-Z0-9.~_-]+)\/(.+)\/?$/, { normalize_: (request, vals) =>
[folder(request, vals), 1, decodeURI(pString(vals[1]))]
}],
// Message: {folder}/m{uid}(/{search})?
[/^([a-zA-Z0-9.~_-]+)\/m([1-9][0-9]*)(?:\/(.+))?$/, { normalize_: (request, vals) =>
[folder(request, vals), 1, pString(vals[2]), pString(vals[1])]
}],
2021-12-07 23:52:05 +08:00
// Page: {folder}/p{int}(/{search})?
2021-12-08 00:22:56 +08:00
[/^([a-zA-Z0-9.~_-]+)\/p([1-9][0-9]*)(?:\/(.+))?$/, { normalize_: fNormS }]
2016-07-07 07:11:13 +08:00
];
}
}