mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-29 03:59:21 +03:00
New thread controller
This commit is contained in:
parent
9dbf77f942
commit
b6ca9e357e
20 changed files with 922 additions and 595 deletions
|
|
@ -208,7 +208,7 @@
|
|||
});
|
||||
}, this);
|
||||
|
||||
this.selector = new Selector(this.contacts, this.currentContact,
|
||||
this.selector = new Selector(this.contacts, this.currentContact, null,
|
||||
'.e-contact-item .actionHandle', '.e-contact-item.selected', '.e-contact-item .checkboxItem',
|
||||
'.e-contact-item.focused');
|
||||
|
||||
|
|
|
|||
|
|
@ -52,8 +52,10 @@
|
|||
|
||||
this.message = MessageStore.message;
|
||||
this.messageList = MessageStore.messageList;
|
||||
this.messageListDisableAutoSelect = MessageStore.messageListDisableAutoSelect;
|
||||
this.folderList = FolderStore.folderList;
|
||||
this.currentMessage = MessageStore.currentMessage;
|
||||
this.selectorMessageSelected = MessageStore.selectorMessageSelected;
|
||||
this.selectorMessageFocused = MessageStore.selectorMessageFocused;
|
||||
this.isMessageSelected = MessageStore.isMessageSelected;
|
||||
this.messageListSearch = MessageStore.messageListSearch;
|
||||
this.messageListError = MessageStore.messageListError;
|
||||
|
|
@ -224,27 +226,12 @@
|
|||
|
||||
this.quotaTooltip = _.bind(this.quotaTooltip, this);
|
||||
|
||||
this.selector = new Selector(this.messageList, this.currentMessage,
|
||||
this.selector = new Selector(this.messageList, this.selectorMessageSelected, this.selectorMessageFocused,
|
||||
'.messageListItem .actionHandle', '.messageListItem.selected', '.messageListItem .checkboxMessage',
|
||||
'.messageListItem.focused');
|
||||
|
||||
this.selector.on('onItemSelect', _.bind(function (oMessage) {
|
||||
if (oMessage)
|
||||
{
|
||||
MessageStore.message(MessageStore.staticMessage.populateByMessageListItem(oMessage));
|
||||
|
||||
this.populateMessageBody(MessageStore.message());
|
||||
|
||||
if (Enums.Layout.NoPreview === SettingsStore.layout())
|
||||
{
|
||||
kn.setHash(Links.messagePreview(), true);
|
||||
MessageStore.message.focused(true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageStore.message(null);
|
||||
}
|
||||
MessageStore.selectMessage(oMessage);
|
||||
}, this));
|
||||
|
||||
this.selector.on('onItemGetUid', function (oMessage) {
|
||||
|
|
@ -281,6 +268,11 @@
|
|||
|
||||
MessageListMailBoxUserView.prototype.useAutoSelect = function ()
|
||||
{
|
||||
if (this.messageListDisableAutoSelect())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (/is:unseen/.test(this.mainMessageListSearch()))
|
||||
{
|
||||
return false;
|
||||
|
|
@ -353,129 +345,15 @@
|
|||
return oEl;
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {string} sResult
|
||||
* @param {AjaxJsonDefaultResponse} oData
|
||||
* @param {boolean} bCached
|
||||
*/
|
||||
MessageListMailBoxUserView.prototype.onMessageResponse = function (sResult, oData, bCached)
|
||||
{
|
||||
MessageStore.hideMessageBodies();
|
||||
MessageStore.messageLoading(false);
|
||||
|
||||
if (Enums.StorageResultType.Success === sResult && oData && oData.Result)
|
||||
{
|
||||
MessageStore.setMessage(oData, bCached);
|
||||
}
|
||||
else if (Enums.StorageResultType.Unload === sResult)
|
||||
{
|
||||
MessageStore.message(null);
|
||||
MessageStore.messageError('');
|
||||
}
|
||||
else if (Enums.StorageResultType.Abort !== sResult)
|
||||
{
|
||||
MessageStore.message(null);
|
||||
MessageStore.messageError((oData && oData.ErrorCode ?
|
||||
Translator.getNotification(oData.ErrorCode) :
|
||||
Translator.getNotification(Enums.Notification.UnknownError)));
|
||||
}
|
||||
};
|
||||
|
||||
MessageListMailBoxUserView.prototype.populateMessageBody = function (oMessage)
|
||||
{
|
||||
if (oMessage)
|
||||
{
|
||||
if (Remote.message(this.onMessageResponse, oMessage.folderFullNameRaw, oMessage.uid))
|
||||
{
|
||||
MessageStore.messageLoading(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.log('Error: Unknown message request: ' + oMessage.folderFullNameRaw + ' ~ ' + oMessage.uid + ' [e-101]');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {string} sFolderFullNameRaw
|
||||
* @param {string|bool} sUid
|
||||
* @param {number} iSetAction
|
||||
* @param {Array=} aMessages = null
|
||||
*/
|
||||
MessageListMailBoxUserView.prototype.setAction = function (sFolderFullNameRaw, iSetAction, aMessages)
|
||||
MessageListMailBoxUserView.prototype.setAction = function (sFolderFullNameRaw, mUid, iSetAction, aMessages)
|
||||
{
|
||||
var
|
||||
aUids = [],
|
||||
oFolder = null,
|
||||
iAlreadyUnread = 0
|
||||
;
|
||||
|
||||
if (Utils.isUnd(aMessages))
|
||||
{
|
||||
aMessages = MessageStore.messageListChecked();
|
||||
}
|
||||
|
||||
aUids = _.map(aMessages, function (oMessage) {
|
||||
return oMessage.uid;
|
||||
});
|
||||
|
||||
if ('' !== sFolderFullNameRaw && 0 < aUids.length)
|
||||
{
|
||||
switch (iSetAction) {
|
||||
case Enums.MessageSetAction.SetSeen:
|
||||
_.each(aMessages, function (oMessage) {
|
||||
if (oMessage.unseen())
|
||||
{
|
||||
iAlreadyUnread++;
|
||||
}
|
||||
|
||||
oMessage.unseen(false);
|
||||
Cache.storeMessageFlagsToCache(oMessage);
|
||||
});
|
||||
|
||||
oFolder = Cache.getFolderFromCacheList(sFolderFullNameRaw);
|
||||
if (oFolder)
|
||||
{
|
||||
oFolder.messageCountUnread(oFolder.messageCountUnread() - iAlreadyUnread);
|
||||
}
|
||||
|
||||
Remote.messageSetSeen(Utils.emptyFunction, sFolderFullNameRaw, aUids, true);
|
||||
break;
|
||||
case Enums.MessageSetAction.UnsetSeen:
|
||||
_.each(aMessages, function (oMessage) {
|
||||
if (oMessage.unseen())
|
||||
{
|
||||
iAlreadyUnread++;
|
||||
}
|
||||
|
||||
oMessage.unseen(true);
|
||||
Cache.storeMessageFlagsToCache(oMessage);
|
||||
});
|
||||
|
||||
oFolder = Cache.getFolderFromCacheList(sFolderFullNameRaw);
|
||||
if (oFolder)
|
||||
{
|
||||
oFolder.messageCountUnread(oFolder.messageCountUnread() - iAlreadyUnread + aUids.length);
|
||||
}
|
||||
Remote.messageSetSeen(Utils.emptyFunction, sFolderFullNameRaw, aUids, false);
|
||||
break;
|
||||
case Enums.MessageSetAction.SetFlag:
|
||||
_.each(aMessages, function (oMessage) {
|
||||
oMessage.flagged(true);
|
||||
Cache.storeMessageFlagsToCache(oMessage);
|
||||
});
|
||||
Remote.messageSetFlagged(Utils.emptyFunction, sFolderFullNameRaw, aUids, true);
|
||||
break;
|
||||
case Enums.MessageSetAction.UnsetFlag:
|
||||
_.each(aMessages, function (oMessage) {
|
||||
oMessage.flagged(false);
|
||||
Cache.storeMessageFlagsToCache(oMessage);
|
||||
});
|
||||
Remote.messageSetFlagged(Utils.emptyFunction, sFolderFullNameRaw, aUids, false);
|
||||
break;
|
||||
}
|
||||
|
||||
require('App/User').reloadFlagsCurrentMessageListAndMessageFromCache();
|
||||
}
|
||||
require('App/User').messageListAction(sFolderFullNameRaw, mUid, iSetAction, aMessages);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -532,8 +410,8 @@
|
|||
|
||||
MessageListMailBoxUserView.prototype.listSetSeen = function ()
|
||||
{
|
||||
this.setAction(FolderStore.currentFolderFullNameRaw(), Enums.MessageSetAction.SetSeen,
|
||||
MessageStore.messageListCheckedOrSelected());
|
||||
this.setAction(FolderStore.currentFolderFullNameRaw(), true,
|
||||
Enums.MessageSetAction.SetSeen, MessageStore.messageListCheckedOrSelected());
|
||||
};
|
||||
|
||||
MessageListMailBoxUserView.prototype.listSetAllSeen = function ()
|
||||
|
|
@ -543,20 +421,20 @@
|
|||
|
||||
MessageListMailBoxUserView.prototype.listUnsetSeen = function ()
|
||||
{
|
||||
this.setAction(FolderStore.currentFolderFullNameRaw(), Enums.MessageSetAction.UnsetSeen,
|
||||
MessageStore.messageListCheckedOrSelected());
|
||||
this.setAction(FolderStore.currentFolderFullNameRaw(), true,
|
||||
Enums.MessageSetAction.UnsetSeen, MessageStore.messageListCheckedOrSelected());
|
||||
};
|
||||
|
||||
MessageListMailBoxUserView.prototype.listSetFlags = function ()
|
||||
{
|
||||
this.setAction(FolderStore.currentFolderFullNameRaw(), Enums.MessageSetAction.SetFlag,
|
||||
MessageStore.messageListCheckedOrSelected());
|
||||
this.setAction(FolderStore.currentFolderFullNameRaw(), true,
|
||||
Enums.MessageSetAction.SetFlag, MessageStore.messageListCheckedOrSelected());
|
||||
};
|
||||
|
||||
MessageListMailBoxUserView.prototype.listUnsetFlags = function ()
|
||||
{
|
||||
this.setAction(FolderStore.currentFolderFullNameRaw(), Enums.MessageSetAction.UnsetFlag,
|
||||
MessageStore.messageListCheckedOrSelected());
|
||||
this.setAction(FolderStore.currentFolderFullNameRaw(), true,
|
||||
Enums.MessageSetAction.UnsetFlag, MessageStore.messageListCheckedOrSelected());
|
||||
};
|
||||
|
||||
MessageListMailBoxUserView.prototype.flagMessages = function (oCurrentMessage)
|
||||
|
|
@ -577,12 +455,12 @@
|
|||
|
||||
if (0 < aCheckedUids.length && -1 < Utils.inArray(oCurrentMessage.uid, aCheckedUids))
|
||||
{
|
||||
this.setAction(oCurrentMessage.folderFullNameRaw, oCurrentMessage.flagged() ?
|
||||
this.setAction(oCurrentMessage.folderFullNameRaw, true, oCurrentMessage.flagged() ?
|
||||
Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, aChecked);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.setAction(oCurrentMessage.folderFullNameRaw, oCurrentMessage.flagged() ?
|
||||
this.setAction(oCurrentMessage.folderFullNameRaw, true, oCurrentMessage.flagged() ?
|
||||
Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, [oCurrentMessage]);
|
||||
}
|
||||
}
|
||||
|
|
@ -603,12 +481,12 @@
|
|||
|
||||
if (Utils.isUnd(bFlag))
|
||||
{
|
||||
this.setAction(aChecked[0].folderFullNameRaw,
|
||||
this.setAction(aChecked[0].folderFullNameRaw, true,
|
||||
aChecked.length === aFlagged.length ? Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, aChecked);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.setAction(aChecked[0].folderFullNameRaw,
|
||||
this.setAction(aChecked[0].folderFullNameRaw, true,
|
||||
!bFlag ? Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, aChecked);
|
||||
}
|
||||
}
|
||||
|
|
@ -629,12 +507,12 @@
|
|||
|
||||
if (Utils.isUnd(bSeen))
|
||||
{
|
||||
this.setAction(aChecked[0].folderFullNameRaw,
|
||||
this.setAction(aChecked[0].folderFullNameRaw, true,
|
||||
0 < aUnseen.length ? Enums.MessageSetAction.SetSeen : Enums.MessageSetAction.UnsetSeen, aChecked);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.setAction(aChecked[0].folderFullNameRaw,
|
||||
this.setAction(aChecked[0].folderFullNameRaw, true,
|
||||
bSeen ? Enums.MessageSetAction.SetSeen : Enums.MessageSetAction.UnsetSeen, aChecked);
|
||||
}
|
||||
}
|
||||
|
|
@ -647,38 +525,6 @@
|
|||
this.oContentVisible = $('.b-content', oDom);
|
||||
this.oContentScrollable = $('.content', this.oContentVisible);
|
||||
|
||||
this.oContentVisible.on('click', '.fullThreadHandle', function () {
|
||||
var
|
||||
aList = [],
|
||||
oMessage = ko.dataFor(this)
|
||||
;
|
||||
|
||||
if (oMessage && !oMessage.lastInCollapsedThreadLoading())
|
||||
{
|
||||
MessageStore.messageListThreadFolder(oMessage.folderFullNameRaw);
|
||||
|
||||
aList = MessageStore.messageListThreadUids();
|
||||
|
||||
if (oMessage.lastInCollapsedThread())
|
||||
{
|
||||
aList.push(0 < oMessage.parentUid() ? oMessage.parentUid() : oMessage.uid);
|
||||
}
|
||||
else
|
||||
{
|
||||
aList = _.without(aList, 0 < oMessage.parentUid() ? oMessage.parentUid() : oMessage.uid);
|
||||
}
|
||||
|
||||
MessageStore.messageListThreadUids(_.uniq(aList));
|
||||
|
||||
oMessage.lastInCollapsedThreadLoading(true);
|
||||
oMessage.lastInCollapsedThread(!oMessage.lastInCollapsedThread());
|
||||
|
||||
require('App/User').reloadMessageList();
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
this.selector.init(this.oContentVisible, this.oContentScrollable, Enums.KeyState.MessageList);
|
||||
|
||||
oDom
|
||||
|
|
|
|||
|
|
@ -58,11 +58,9 @@
|
|||
this.pswp = null;
|
||||
|
||||
this.message = MessageStore.message;
|
||||
this.currentMessage = MessageStore.currentMessage;
|
||||
this.messageListChecked = MessageStore.messageListChecked;
|
||||
this.hasCheckedMessages = MessageStore.hasCheckedMessages;
|
||||
this.messageListCheckedOrSelectedUidsWithSubMails = MessageStore.messageListCheckedOrSelectedUidsWithSubMails;
|
||||
this.messageLoading = MessageStore.messageLoading;
|
||||
this.messageLoadingThrottle = MessageStore.messageLoadingThrottle;
|
||||
this.messagesBodiesDom = MessageStore.messagesBodiesDom;
|
||||
this.useThreads = SettingsStore.useThreads;
|
||||
|
|
@ -103,7 +101,7 @@
|
|||
this.message.subscribe(function (oMessage) {
|
||||
if (!oMessage)
|
||||
{
|
||||
this.currentMessage(null);
|
||||
MessageStore.selectorMessageSelected(null);
|
||||
}
|
||||
}, this);
|
||||
|
||||
|
|
@ -130,47 +128,52 @@
|
|||
}, this.messageVisibility);
|
||||
|
||||
this.deleteCommand = Utils.createCommand(this, function () {
|
||||
if (this.message())
|
||||
var oMessage = this.message();
|
||||
if (oMessage)
|
||||
{
|
||||
this.message(null);
|
||||
require('App/User').deleteMessagesFromFolder(Enums.FolderType.Trash,
|
||||
this.message().folderFullNameRaw,
|
||||
[this.message().uid], true);
|
||||
oMessage.folderFullNameRaw, [oMessage.uid], true);
|
||||
}
|
||||
}, this.messageVisibility);
|
||||
|
||||
this.deleteWithoutMoveCommand = Utils.createCommand(this, function () {
|
||||
if (this.message())
|
||||
var oMessage = this.message();
|
||||
if (oMessage)
|
||||
{
|
||||
this.message(null);
|
||||
require('App/User').deleteMessagesFromFolder(Enums.FolderType.Trash,
|
||||
FolderStore.currentFolderFullNameRaw(),
|
||||
[this.message().uid], false);
|
||||
oMessage.folderFullNameRaw, [oMessage.uid], false);
|
||||
}
|
||||
}, this.messageVisibility);
|
||||
|
||||
this.archiveCommand = Utils.createCommand(this, function () {
|
||||
if (this.message())
|
||||
var oMessage = this.message();
|
||||
if (oMessage)
|
||||
{
|
||||
this.message(null);
|
||||
require('App/User').deleteMessagesFromFolder(Enums.FolderType.Archive,
|
||||
this.message().folderFullNameRaw,
|
||||
[this.message().uid], true);
|
||||
oMessage.folderFullNameRaw, [oMessage.uid], true);
|
||||
}
|
||||
}, this.messageVisibility);
|
||||
|
||||
this.spamCommand = Utils.createCommand(this, function () {
|
||||
if (this.message())
|
||||
var oMessage = this.message();
|
||||
if (oMessage)
|
||||
{
|
||||
this.message(null);
|
||||
require('App/User').deleteMessagesFromFolder(Enums.FolderType.Spam,
|
||||
this.message().folderFullNameRaw,
|
||||
[this.message().uid], true);
|
||||
oMessage.folderFullNameRaw, [oMessage.uid], true);
|
||||
}
|
||||
}, this.messageVisibility);
|
||||
|
||||
this.notSpamCommand = Utils.createCommand(this, function () {
|
||||
if (this.message())
|
||||
var oMessage = this.message();
|
||||
if (oMessage)
|
||||
{
|
||||
this.message(null);
|
||||
require('App/User').deleteMessagesFromFolder(Enums.FolderType.NotSpam,
|
||||
this.message().folderFullNameRaw,
|
||||
[this.message().uid], true);
|
||||
oMessage.folderFullNameRaw, [oMessage.uid], true);
|
||||
}
|
||||
}, this.messageVisibility);
|
||||
|
||||
|
|
@ -178,6 +181,8 @@
|
|||
|
||||
this.viewBodyTopValue = ko.observable(0);
|
||||
|
||||
this.viewFolder = '';
|
||||
this.viewUid = '';
|
||||
this.viewHash = '';
|
||||
this.viewSubject = ko.observable('');
|
||||
this.viewFromShort = ko.observable('');
|
||||
|
|
@ -197,7 +202,94 @@
|
|||
this.viewUserPic = ko.observable(Consts.DataImages.UserDotPic);
|
||||
this.viewUserPicVisible = ko.observable(false);
|
||||
this.viewIsImportant = ko.observable(false);
|
||||
this.viewIsFlagged = ko.observable(false);
|
||||
|
||||
// THREADS
|
||||
this.viewThreads = ko.observableArray([]);
|
||||
this.viewThreads.trigger = ko.observable(false);
|
||||
|
||||
MessageStore.messageLastThreadUidsData.subscribe(function (oData) {
|
||||
if (oData && oData['Uids'])
|
||||
{
|
||||
oData['Uid'] = Utils.pString(oData['Uid']);
|
||||
if (this.viewFolder === oData['Folder'] && this.viewUid === oData['Uid'])
|
||||
{
|
||||
this.viewThreads(oData['Uids']);
|
||||
this.viewThreads.trigger(!this.viewThreads.trigger());
|
||||
}
|
||||
|
||||
var oMessage = MessageStore.message();
|
||||
if (oMessage && oMessage.folderFullNameRaw === oData['Folder'] && oMessage.uid === oData['Uid'])
|
||||
{
|
||||
oMessage.threads(oData['Uids']);
|
||||
}
|
||||
|
||||
oMessage = _.find(MessageStore.messageList(), function (oMessage) {
|
||||
return oMessage && oMessage.folderFullNameRaw === oData['Folder'] && oMessage.uid === oData['Uid'];
|
||||
});
|
||||
|
||||
if (oMessage && oMessage.folderFullNameRaw === oData['Folder'] && oMessage.uid === oData['Uid'])
|
||||
{
|
||||
oMessage.threads(oData['Uids']);
|
||||
}
|
||||
}
|
||||
}, this);
|
||||
|
||||
this.viewThreads.status = ko.computed(function () {
|
||||
|
||||
this.viewThreads.trigger();
|
||||
|
||||
var
|
||||
iIndex = 0,
|
||||
aResult = [false, '', '', '', ''],
|
||||
aThreads = this.viewThreads.peek(),
|
||||
iLen = aThreads.length
|
||||
;
|
||||
|
||||
if (1 < iLen)
|
||||
{
|
||||
iIndex = Utils.inArray(this.viewUid, aThreads);
|
||||
if (-1 < iIndex)
|
||||
{
|
||||
aResult[0] = true;
|
||||
aResult[1] = (iIndex + 1) + ' / ' + iLen;
|
||||
aResult[2] = aThreads[iIndex];
|
||||
aResult[3] = 0 < iIndex && aThreads[iIndex - 1] ? aThreads[iIndex - 1] : '';
|
||||
aResult[4] = aThreads[iIndex + 1] ? aThreads[iIndex + 1] : '';
|
||||
}
|
||||
}
|
||||
|
||||
return aResult;
|
||||
|
||||
}, this).extend({'notify': 'always'});
|
||||
|
||||
this.viewThreadsControlVisibility = ko.computed(function () {
|
||||
return !!this.viewThreads.status()[0];
|
||||
}, this);
|
||||
|
||||
this.viewThreadsControlDesc = ko.computed(function () {
|
||||
return this.viewThreads.status()[1];
|
||||
}, this);
|
||||
|
||||
this.viewThreadsControlBackAllow = ko.computed(function () {
|
||||
return '' !== this.viewThreads.status()[4] && !this.messageLoadingThrottle();
|
||||
}, this);
|
||||
|
||||
this.viewThreadsControlForwardAllow = ko.computed(function () {
|
||||
return '' !== this.viewThreads.status()[3] && !this.messageLoadingThrottle();
|
||||
}, this);
|
||||
|
||||
this.threadBackCommand = Utils.createCommand(this, function () {
|
||||
var aStatus = this.viewThreads.status();
|
||||
this.openThreadMessage(aStatus[4]);
|
||||
}, this.viewThreadsControlBackAllow);
|
||||
|
||||
this.threadForwardCommand = Utils.createCommand(this, function () {
|
||||
var aStatus = this.viewThreads.status();
|
||||
this.openThreadMessage(aStatus[3]);
|
||||
}, this.viewThreadsControlForwardAllow);
|
||||
|
||||
// PGP
|
||||
this.viewPgpPassword = ko.observable('');
|
||||
this.viewPgpSignedVerifyStatus = ko.computed(function () {
|
||||
return this.message() ? this.message().pgpSignedVerifyStatus() : Enums.SignedVerifyStatus.None;
|
||||
|
|
@ -260,6 +352,8 @@
|
|||
this.scrollMessageToTop();
|
||||
}
|
||||
|
||||
this.viewFolder = oMessage.folderFullNameRaw;
|
||||
this.viewUid = oMessage.uid;
|
||||
this.viewHash = oMessage.hash;
|
||||
this.viewSubject(oMessage.subject());
|
||||
this.viewFromShort(oMessage.fromToLine(true, true));
|
||||
|
|
@ -277,6 +371,10 @@
|
|||
this.viewViewLink(oMessage.viewLink());
|
||||
this.viewDownloadLink(oMessage.downloadLink());
|
||||
this.viewIsImportant(oMessage.isImportant());
|
||||
this.viewIsFlagged(oMessage.flagged());
|
||||
|
||||
this.viewThreads(oMessage.threads());
|
||||
this.viewThreads.trigger(!this.viewThreads.trigger());
|
||||
|
||||
sLastEmail = oMessage.fromAsSingleEmail();
|
||||
Cache.getUserPic(sLastEmail, function (sPic, sEmail) {
|
||||
|
|
@ -294,12 +392,29 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
this.viewFolder = '';
|
||||
this.viewUid = '';
|
||||
this.viewHash = '';
|
||||
|
||||
this.viewThreads([]);
|
||||
|
||||
this.scrollMessageToTop();
|
||||
}
|
||||
|
||||
}, this);
|
||||
|
||||
this.message.viewTrigger.subscribe(function () {
|
||||
var oMessage = this.message();
|
||||
if (oMessage)
|
||||
{
|
||||
this.viewIsFlagged(oMessage.flagged());
|
||||
}
|
||||
else
|
||||
{
|
||||
this.viewIsFlagged(false);
|
||||
}
|
||||
}, this);
|
||||
|
||||
this.fullScreenMode.subscribe(function (bValue) {
|
||||
if (bValue)
|
||||
{
|
||||
|
|
@ -333,6 +448,24 @@
|
|||
kn.extendAsViewModel(['View/User/MailBox/MessageView', 'View/App/MailBox/MessageView', 'MailBoxMessageViewViewModel'], MessageViewMailBoxUserView);
|
||||
_.extend(MessageViewMailBoxUserView.prototype, AbstractView.prototype);
|
||||
|
||||
MessageViewMailBoxUserView.prototype.updateViewFlagsFromCache = function ()
|
||||
{
|
||||
var aFlags = this.getMessageFlagsFromCache(this.viewFolder, this.viewUid);
|
||||
if (aFlags)
|
||||
{
|
||||
this.viewIsFlagged(!!aFlags[1]);
|
||||
}
|
||||
};
|
||||
|
||||
MessageViewMailBoxUserView.prototype.openThreadMessage = function (sUid)
|
||||
{
|
||||
var oMessage = this.message();
|
||||
if (oMessage && sUid)
|
||||
{
|
||||
MessageStore.selectThreadMessage(oMessage.folderFullNameRaw, sUid);
|
||||
}
|
||||
};
|
||||
|
||||
MessageViewMailBoxUserView.prototype.isPgpActionVisible = function ()
|
||||
{
|
||||
return Enums.SignedVerifyStatus.Success !== this.viewPgpSignedVerifyStatus();
|
||||
|
|
@ -543,6 +676,9 @@
|
|||
require('App/User').download(oAttachment.linkDownload());
|
||||
}
|
||||
})
|
||||
.on('click', '.messageItemHeader .flagParent', function () {
|
||||
self.flagViewMessage();
|
||||
})
|
||||
;
|
||||
|
||||
this.message.focused.subscribe(function (bValue) {
|
||||
|
|
@ -575,6 +711,19 @@
|
|||
this.initShortcuts();
|
||||
};
|
||||
|
||||
/**
|
||||
* @return {boolean}
|
||||
*/
|
||||
MessageViewMailBoxUserView.prototype.flagViewMessage = function ()
|
||||
{
|
||||
var oMessage = this.message();
|
||||
if (oMessage)
|
||||
{
|
||||
require('App/User').messageListAction(oMessage.folderFullNameRaw, oMessage.uid,
|
||||
oMessage.flagged() ? Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, [oMessage]);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
|
@ -664,16 +813,26 @@
|
|||
}
|
||||
});
|
||||
|
||||
key('ctrl+left, command+left, ctrl+up, command+up', Enums.KeyState.MessageView, function () {
|
||||
key('ctrl+up, command+up', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
self.goUpCommand();
|
||||
return false;
|
||||
});
|
||||
|
||||
key('ctrl+right, command+right, ctrl+down, command+down', Enums.KeyState.MessageView, function () {
|
||||
key('ctrl+down, command+down', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
self.goDownCommand();
|
||||
return false;
|
||||
});
|
||||
|
||||
key('ctrl+left, command+left', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
self.threadForwardCommand();
|
||||
return false;
|
||||
});
|
||||
|
||||
key('ctrl+right, command+right', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
self.threadBackCommand();
|
||||
return false;
|
||||
});
|
||||
|
||||
// print
|
||||
key('ctrl+p, command+p', Enums.KeyState.MessageView, function () {
|
||||
if (self.message())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue