snappymail/dev/Screen/User/MailBox.js
2016-08-11 02:34:09 +03:00

180 lines
4.2 KiB
JavaScript

import _ from '_';
import {Focused, Capa, ClientSideKeyName, Magics} from 'Common/Enums';
import {leftPanelDisabled, leftPanelType, bMobileDevice} from 'Common/Globals';
import {pString, pInt, decodeURI, windowResizeCallback} from 'Common/Utils';
import {getFolderFromCacheList, getFolderFullNameRaw, getFolderInboxName} from 'Common/Cache';
import {i18n} from 'Common/Translator';
import * as Events from 'Common/Events';
import * as Settings from 'Storage/Settings';
import AppStore from 'Stores/User/App';
import AccountStore from 'Stores/User/Account';
import SettingsStore from 'Stores/User/Settings';
import FolderStore from 'Stores/User/Folder';
import MessageStore from 'Stores/User/Message';
import {AbstractScreen} from 'Knoin/AbstractScreen';
import App from 'App/User';
class MailBoxUserScreen extends AbstractScreen
{
constructor() {
super('mailbox', [
require('View/User/MailBox/SystemDropDown'),
require('View/User/MailBox/FolderList'),
require('View/User/MailBox/MessageList'),
require('View/User/MailBox/MessageView')
]);
}
/**
* @returns {void}
*/
updateWindowTitle() {
let foldersInboxUnreadCount = FolderStore.foldersInboxUnreadCount();
const email = AccountStore.email();
if (Settings.appSettingsGet('listPermanentFiltered'))
{
foldersInboxUnreadCount = 0;
}
App.setWindowTitle(('' === email ? '' : '' + (0 < foldersInboxUnreadCount ? '(' + foldersInboxUnreadCount + ') ' : ' ') + email + ' - ') + i18n('TITLES/MAILBOX'));
}
/**
* @returns {void}
*/
onShow() {
this.updateWindowTitle();
AppStore.focusedState(Focused.None);
AppStore.focusedState(Focused.MessageList);
if (Settings.appSettingsGet('mobile'))
{
leftPanelDisabled(true);
}
if (!Settings.capa(Capa.Folders))
{
leftPanelType(Settings.capa(Capa.Composer) || Settings.capa(Capa.Contacts) ? 'short' : 'none');
}
else
{
leftPanelType('');
}
}
/**
* @param {string} folderHash
* @param {number} page
* @param {string} search
*/
onRoute(folderHash, page, search) {
let threadUid = folderHash.replace(/^(.+)~([\d]+)$/, '$2');
const folder = getFolderFromCacheList(getFolderFullNameRaw(folderHash.replace(/~([\d]+)$/, '')));
if (folder)
{
if (folderHash === threadUid)
{
threadUid = '';
}
FolderStore.currentFolder(folder);
MessageStore.messageListPage(page);
MessageStore.messageListSearch(search);
MessageStore.messageListThreadUid(threadUid);
App.reloadMessageList();
}
}
/**
* @returns {void}
*/
onStart() {
FolderStore.folderList.subscribe(windowResizeCallback);
MessageStore.messageList.subscribe(windowResizeCallback);
MessageStore.message.subscribe(windowResizeCallback);
_.delay(() => {
SettingsStore.layout.valueHasMutated();
}, Magics.Time50ms);
Events.sub('mailbox.inbox-unread-count', (count) => {
FolderStore.foldersInboxUnreadCount(count);
const email = AccountStore.email();
_.each(AccountStore.accounts(), (item) => {
if (item && email === item.email)
{
item.count(count);
}
});
this.updateWindowTitle();
});
}
/**
* @returns {void}
*/
onBuild() {
if (!bMobileDevice && !Settings.appSettingsGet('mobile'))
{
_.defer(() => {
App.initHorizontalLayoutResizer(ClientSideKeyName.MessageListSize);
});
}
}
/**
* @returns {Array}
*/
routes() {
var
inboxFolderName = getFolderInboxName(),
fNormS = (request, vals) => {
vals[0] = pString(vals[0]);
vals[1] = pInt(vals[1]);
vals[1] = 0 >= vals[1] ? 1 : vals[1];
vals[2] = pString(vals[2]);
if ('' === request)
{
vals[0] = inboxFolderName;
vals[1] = 1;
}
return [decodeURI(vals[0]), vals[1], decodeURI(vals[2])];
},
fNormD = (request, vals) => {
vals[0] = pString(vals[0]);
vals[1] = pString(vals[1]);
if ('' === request)
{
vals[0] = inboxFolderName;
}
return [decodeURI(vals[0]), 1, decodeURI(vals[1])];
};
return [
[/^([a-zA-Z0-9~]+)\/p([1-9][0-9]*)\/(.+)\/?$/, {'normalize_': fNormS}],
[/^([a-zA-Z0-9~]+)\/p([1-9][0-9]*)$/, {'normalize_': fNormS}],
[/^([a-zA-Z0-9~]+)\/(.+)\/?$/, {'normalize_': fNormD}],
[/^([^\/]*)$/, {'normalize_': fNormS}]
];
}
}
export {MailBoxUserScreen, MailBoxUserScreen as default};