snappymail/dev/Screen/User/MailBox.js
2015-04-07 20:40:27 +04:00

175 lines
4.1 KiB
JavaScript

(function () {
'use strict';
var
_ = require('_'),
Enums = require('Common/Enums'),
Globals = require('Common/Globals'),
Utils = require('Common/Utils'),
Events = require('Common/Events'),
Translator = require('Common/Translator'),
Cache = require('Common/Cache'),
AppStore = require('Stores/User/App'),
AccountStore = require('Stores/User/Account'),
SettingsStore = require('Stores/User/Settings'),
FolderStore = require('Stores/User/Folder'),
MessageStore = require('Stores/User/Message'),
AbstractScreen = require('Knoin/AbstractScreen')
;
/**
* @constructor
* @extends AbstractScreen
*/
function MailBoxUserScreen()
{
AbstractScreen.call(this, 'mailbox', [
require('View/User/MailBox/SystemDropDown'),
require('View/User/MailBox/FolderList'),
require('View/User/MailBox/MessageList'),
require('View/User/MailBox/MessageView')
]);
this.oLastRoute = {};
}
_.extend(MailBoxUserScreen.prototype, AbstractScreen.prototype);
/**
* @type {Object}
*/
MailBoxUserScreen.prototype.oLastRoute = {};
MailBoxUserScreen.prototype.updateWindowTitle = function ()
{
var
sEmail = AccountStore.email(),
nFoldersInboxUnreadCount = FolderStore.foldersInboxUnreadCount()
;
require('App/User').setWindowTitle(('' === sEmail ? '' : '' +
(0 < nFoldersInboxUnreadCount ? '(' + nFoldersInboxUnreadCount + ') ' : ' ') +
sEmail + ' - ') + Translator.i18n('TITLES/MAILBOX'));
};
MailBoxUserScreen.prototype.onShow = function ()
{
this.updateWindowTitle();
AppStore.focusedState(Enums.Focused.None);
AppStore.focusedState(Enums.Focused.MessageList);
};
/**
* @param {string} sFolderHash
* @param {number} iPage
* @param {string} sSearch
* @param {boolean=} bPreview = false
*/
MailBoxUserScreen.prototype.onRoute = function (sFolderHash, iPage, sSearch)
{
var
sFolderFullNameRaw = Cache.getFolderFullNameRaw(sFolderHash),
oFolder = Cache.getFolderFromCacheList(sFolderFullNameRaw)
;
if (oFolder)
{
FolderStore.currentFolder(oFolder);
MessageStore.messageListPage(iPage);
MessageStore.messageListSearch(sSearch);
require('App/User').reloadMessageList();
}
};
MailBoxUserScreen.prototype.onStart = function ()
{
FolderStore.folderList.subscribe(Utils.windowResizeCallback);
MessageStore.messageList.subscribe(Utils.windowResizeCallback);
MessageStore.message.subscribe(Utils.windowResizeCallback);
_.delay(function () {
SettingsStore.layout.valueHasMutated();
}, 50);
Events.sub('mailbox.inbox-unread-count', _.bind(function (iCount) {
FolderStore.foldersInboxUnreadCount(iCount);
var sEmail = AccountStore.email();
_.each(AccountStore.accounts(), function (oItem) {
if (oItem && sEmail === oItem.email)
{
oItem.count(iCount);
}
});
this.updateWindowTitle();
}, this));
};
MailBoxUserScreen.prototype.onBuild = function ()
{
if (!Globals.bMobileDevice)
{
_.defer(function () {
require('App/User').initHorizontalLayoutResizer(Enums.ClientSideKeyName.MessageListSize);
});
}
};
/**
* @return {Array}
*/
MailBoxUserScreen.prototype.routes = function ()
{
var
sInboxFolderName = Cache.getFolderInboxName(),
fNormS = function (oRequest, oVals) {
oVals[0] = Utils.pString(oVals[0]);
oVals[1] = Utils.pInt(oVals[1]);
oVals[1] = 0 >= oVals[1] ? 1 : oVals[1];
oVals[2] = Utils.pString(oVals[2]);
if ('' === oRequest)
{
oVals[0] = sInboxFolderName;
oVals[1] = 1;
}
return [decodeURI(oVals[0]), oVals[1], decodeURI(oVals[2])];
},
fNormD = function (oRequest, oVals) {
oVals[0] = Utils.pString(oVals[0]);
oVals[1] = Utils.pString(oVals[1]);
if ('' === oRequest)
{
oVals[0] = sInboxFolderName;
}
return [decodeURI(oVals[0]), 1, decodeURI(oVals[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}]
];
};
module.exports = MailBoxUserScreen;
}());