mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
FolderFullNameRaw is gone due to UTF8
This commit is contained in:
parent
f743f0e27a
commit
d33ec54c1c
14 changed files with 181 additions and 184 deletions
|
|
@ -132,7 +132,7 @@ class AppUser extends AbstractApp {
|
||||||
let iOffset = (MessageUserStore.listPage() - 1) * SettingsUserStore.messagesPerPage();
|
let iOffset = (MessageUserStore.listPage() - 1) * SettingsUserStore.messagesPerPage();
|
||||||
|
|
||||||
if (bDropCurrenFolderCache) {
|
if (bDropCurrenFolderCache) {
|
||||||
setFolderHash(FolderUserStore.currentFolderFullNameRaw(), '');
|
setFolderHash(FolderUserStore.currentFolderFullName(), '');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bDropPagePosition) {
|
if (bDropPagePosition) {
|
||||||
|
|
@ -167,7 +167,7 @@ class AppUser extends AbstractApp {
|
||||||
MessageUserStore.listLoading(false);
|
MessageUserStore.listLoading(false);
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Folder: FolderUserStore.currentFolderFullNameRaw(),
|
Folder: FolderUserStore.currentFolderFullName(),
|
||||||
Offset: iOffset,
|
Offset: iOffset,
|
||||||
Limit: SettingsUserStore.messagesPerPage(),
|
Limit: SettingsUserStore.messagesPerPage(),
|
||||||
Search: MessageUserStore.listSearch(),
|
Search: MessageUserStore.listSearch(),
|
||||||
|
|
@ -198,12 +198,12 @@ class AppUser extends AbstractApp {
|
||||||
this.moveCache = {};
|
this.moveCache = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
messagesMoveHelper(fromFolderFullNameRaw, toFolderFullNameRaw, uidsForMove) {
|
messagesMoveHelper(fromFolderFullName, toFolderFullName, uidsForMove) {
|
||||||
const hash = '$$' + fromFolderFullNameRaw + '$$' + toFolderFullNameRaw + '$$';
|
const hash = '$$' + fromFolderFullName + '$$' + toFolderFullName + '$$';
|
||||||
if (!this.moveCache[hash]) {
|
if (!this.moveCache[hash]) {
|
||||||
this.moveCache[hash] = {
|
this.moveCache[hash] = {
|
||||||
From: fromFolderFullNameRaw,
|
From: fromFolderFullName,
|
||||||
To: toFolderFullNameRaw,
|
To: toFolderFullName,
|
||||||
Uid: []
|
Uid: []
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -212,44 +212,44 @@ class AppUser extends AbstractApp {
|
||||||
this.messagesMoveTrigger();
|
this.messagesMoveTrigger();
|
||||||
}
|
}
|
||||||
|
|
||||||
messagesCopyHelper(sFromFolderFullNameRaw, sToFolderFullNameRaw, aUidForCopy) {
|
messagesCopyHelper(sFromFolderFullName, sToFolderFullName, aUidForCopy) {
|
||||||
Remote.messagesCopy(this.moveOrDeleteResponseHelper, sFromFolderFullNameRaw, sToFolderFullNameRaw, aUidForCopy);
|
Remote.messagesCopy(this.moveOrDeleteResponseHelper, sFromFolderFullName, sToFolderFullName, aUidForCopy);
|
||||||
}
|
}
|
||||||
|
|
||||||
messagesDeleteHelper(sFromFolderFullNameRaw, aUidForRemove) {
|
messagesDeleteHelper(sFromFolderFullName, aUidForRemove) {
|
||||||
Remote.messagesDelete(this.moveOrDeleteResponseHelper, sFromFolderFullNameRaw, aUidForRemove);
|
Remote.messagesDelete(this.moveOrDeleteResponseHelper, sFromFolderFullName, aUidForRemove);
|
||||||
}
|
}
|
||||||
|
|
||||||
moveOrDeleteResponseHelper(iError, oData) {
|
moveOrDeleteResponseHelper(iError, oData) {
|
||||||
if (iError) {
|
if (iError) {
|
||||||
setFolderHash(FolderUserStore.currentFolderFullNameRaw(), '');
|
setFolderHash(FolderUserStore.currentFolderFullName(), '');
|
||||||
alert(getNotification(iError));
|
alert(getNotification(iError));
|
||||||
} else if (FolderUserStore.currentFolder()) {
|
} else if (FolderUserStore.currentFolder()) {
|
||||||
if (2 === arrayLength(oData.Result)) {
|
if (2 === arrayLength(oData.Result)) {
|
||||||
setFolderHash(oData.Result[0], oData.Result[1]);
|
setFolderHash(oData.Result[0], oData.Result[1]);
|
||||||
} else {
|
} else {
|
||||||
setFolderHash(FolderUserStore.currentFolderFullNameRaw(), '');
|
setFolderHash(FolderUserStore.currentFolderFullName(), '');
|
||||||
}
|
}
|
||||||
this.reloadMessageList(!MessageUserStore.list.length);
|
this.reloadMessageList(!MessageUserStore.list.length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} sFromFolderFullNameRaw
|
* @param {string} sFromFolderFullName
|
||||||
* @param {Array} aUidForRemove
|
* @param {Array} aUidForRemove
|
||||||
*/
|
*/
|
||||||
deleteMessagesFromFolderWithoutCheck(sFromFolderFullNameRaw, aUidForRemove) {
|
deleteMessagesFromFolderWithoutCheck(sFromFolderFullName, aUidForRemove) {
|
||||||
this.messagesDeleteHelper(sFromFolderFullNameRaw, aUidForRemove);
|
this.messagesDeleteHelper(sFromFolderFullName, aUidForRemove);
|
||||||
MessageUserStore.removeMessagesFromList(sFromFolderFullNameRaw, aUidForRemove);
|
MessageUserStore.removeMessagesFromList(sFromFolderFullName, aUidForRemove);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {number} iDeleteType
|
* @param {number} iDeleteType
|
||||||
* @param {string} sFromFolderFullNameRaw
|
* @param {string} sFromFolderFullName
|
||||||
* @param {Array} aUidForRemove
|
* @param {Array} aUidForRemove
|
||||||
* @param {boolean=} bUseFolder = true
|
* @param {boolean=} bUseFolder = true
|
||||||
*/
|
*/
|
||||||
deleteMessagesFromFolder(iDeleteType, sFromFolderFullNameRaw, aUidForRemove, bUseFolder) {
|
deleteMessagesFromFolder(iDeleteType, sFromFolderFullName, aUidForRemove, bUseFolder) {
|
||||||
let oMoveFolder = null,
|
let oMoveFolder = null,
|
||||||
nSetSystemFoldersNotification = null;
|
nSetSystemFoldersNotification = null;
|
||||||
|
|
||||||
|
|
@ -288,32 +288,32 @@ class AppUser extends AbstractApp {
|
||||||
} else if (
|
} else if (
|
||||||
!bUseFolder ||
|
!bUseFolder ||
|
||||||
(FolderType.Trash === iDeleteType &&
|
(FolderType.Trash === iDeleteType &&
|
||||||
(sFromFolderFullNameRaw === FolderUserStore.spamFolder()
|
(sFromFolderFullName === FolderUserStore.spamFolder()
|
||||||
|| sFromFolderFullNameRaw === FolderUserStore.trashFolder()))
|
|| sFromFolderFullName === FolderUserStore.trashFolder()))
|
||||||
) {
|
) {
|
||||||
showScreenPopup(AskPopupView, [
|
showScreenPopup(AskPopupView, [
|
||||||
i18n('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'),
|
i18n('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'),
|
||||||
() => {
|
() => {
|
||||||
this.messagesDeleteHelper(sFromFolderFullNameRaw, aUidForRemove);
|
this.messagesDeleteHelper(sFromFolderFullName, aUidForRemove);
|
||||||
MessageUserStore.removeMessagesFromList(sFromFolderFullNameRaw, aUidForRemove);
|
MessageUserStore.removeMessagesFromList(sFromFolderFullName, aUidForRemove);
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
} else if (oMoveFolder) {
|
} else if (oMoveFolder) {
|
||||||
this.messagesMoveHelper(sFromFolderFullNameRaw, oMoveFolder.fullName, aUidForRemove);
|
this.messagesMoveHelper(sFromFolderFullName, oMoveFolder.fullName, aUidForRemove);
|
||||||
MessageUserStore.removeMessagesFromList(sFromFolderFullNameRaw, aUidForRemove, oMoveFolder.fullName);
|
MessageUserStore.removeMessagesFromList(sFromFolderFullName, aUidForRemove, oMoveFolder.fullName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} sFromFolderFullNameRaw
|
* @param {string} sFromFolderFullName
|
||||||
* @param {Array} aUidForMove
|
* @param {Array} aUidForMove
|
||||||
* @param {string} sToFolderFullNameRaw
|
* @param {string} sToFolderFullName
|
||||||
* @param {boolean=} bCopy = false
|
* @param {boolean=} bCopy = false
|
||||||
*/
|
*/
|
||||||
moveMessagesToFolder(sFromFolderFullNameRaw, aUidForMove, sToFolderFullNameRaw, bCopy) {
|
moveMessagesToFolder(sFromFolderFullName, aUidForMove, sToFolderFullName, bCopy) {
|
||||||
if (sFromFolderFullNameRaw !== sToFolderFullNameRaw && arrayLength(aUidForMove)) {
|
if (sFromFolderFullName !== sToFolderFullName && arrayLength(aUidForMove)) {
|
||||||
const oFromFolder = getFolderFromCacheList(sFromFolderFullNameRaw),
|
const oFromFolder = getFolderFromCacheList(sFromFolderFullName),
|
||||||
oToFolder = getFolderFromCacheList(sToFolderFullNameRaw);
|
oToFolder = getFolderFromCacheList(sToFolderFullName);
|
||||||
|
|
||||||
if (oFromFolder && oToFolder) {
|
if (oFromFolder && oToFolder) {
|
||||||
if (undefined === bCopy ? false : !!bCopy) {
|
if (undefined === bCopy ? false : !!bCopy) {
|
||||||
|
|
@ -511,7 +511,7 @@ class AppUser extends AbstractApp {
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!hash || unreadCountChange || result.Hash !== hash) {
|
if (!hash || unreadCountChange || result.Hash !== hash) {
|
||||||
if (folderFromCache.fullName === FolderUserStore.currentFolderFullNameRaw()) {
|
if (folderFromCache.fullName === FolderUserStore.currentFolderFullName()) {
|
||||||
this.reloadMessageList();
|
this.reloadMessageList();
|
||||||
} else if (getFolderInboxName() === folderFromCache.fullName) {
|
} else if (getFolderInboxName() === folderFromCache.fullName) {
|
||||||
Remote.messageList(null, {Folder: getFolderInboxName()}, true);
|
Remote.messageList(null, {Folder: getFolderInboxName()}, true);
|
||||||
|
|
@ -555,11 +555,11 @@ class AppUser extends AbstractApp {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hash || item.Hash !== hash) {
|
if (!hash || item.Hash !== hash) {
|
||||||
if (folder.fullName === FolderUserStore.currentFolderFullNameRaw()) {
|
if (folder.fullName === FolderUserStore.currentFolderFullName()) {
|
||||||
this.reloadMessageList();
|
this.reloadMessageList();
|
||||||
}
|
}
|
||||||
} else if (unreadCountChange
|
} else if (unreadCountChange
|
||||||
&& folder.fullName === FolderUserStore.currentFolderFullNameRaw()
|
&& folder.fullName === FolderUserStore.currentFolderFullName()
|
||||||
&& MessageUserStore.list.length) {
|
&& MessageUserStore.list.length) {
|
||||||
this.folderInformation(folder.fullName, MessageUserStore.list());
|
this.folderInformation(folder.fullName, MessageUserStore.list());
|
||||||
}
|
}
|
||||||
|
|
@ -575,11 +575,11 @@ class AppUser extends AbstractApp {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} sFolderFullNameRaw
|
* @param {string} sFolderFullName
|
||||||
* @param {number} iSetAction
|
* @param {number} iSetAction
|
||||||
* @param {Array=} messages = null
|
* @param {Array=} messages = null
|
||||||
*/
|
*/
|
||||||
messageListAction(sFolderFullNameRaw, iSetAction, messages) {
|
messageListAction(sFolderFullName, iSetAction, messages) {
|
||||||
let folder = null,
|
let folder = null,
|
||||||
alreadyUnread = 0,
|
alreadyUnread = 0,
|
||||||
rootUids = [];
|
rootUids = [];
|
||||||
|
|
@ -591,48 +591,48 @@ class AppUser extends AbstractApp {
|
||||||
rootUids = messages.map(oMessage => oMessage && oMessage.uid ? oMessage.uid : null)
|
rootUids = messages.map(oMessage => oMessage && oMessage.uid ? oMessage.uid : null)
|
||||||
.validUnique();
|
.validUnique();
|
||||||
|
|
||||||
if (sFolderFullNameRaw && rootUids.length) {
|
if (sFolderFullName && rootUids.length) {
|
||||||
switch (iSetAction) {
|
switch (iSetAction) {
|
||||||
case MessageSetAction.SetSeen:
|
case MessageSetAction.SetSeen:
|
||||||
rootUids.forEach(sSubUid =>
|
rootUids.forEach(sSubUid =>
|
||||||
alreadyUnread += MessageFlagsCache.storeBySetAction(sFolderFullNameRaw, sSubUid, iSetAction)
|
alreadyUnread += MessageFlagsCache.storeBySetAction(sFolderFullName, sSubUid, iSetAction)
|
||||||
);
|
);
|
||||||
|
|
||||||
folder = getFolderFromCacheList(sFolderFullNameRaw);
|
folder = getFolderFromCacheList(sFolderFullName);
|
||||||
if (folder) {
|
if (folder) {
|
||||||
folder.messageCountUnread(folder.messageCountUnread() - alreadyUnread);
|
folder.messageCountUnread(folder.messageCountUnread() - alreadyUnread);
|
||||||
}
|
}
|
||||||
|
|
||||||
Remote.messageSetSeen(null, sFolderFullNameRaw, rootUids, true);
|
Remote.messageSetSeen(null, sFolderFullName, rootUids, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MessageSetAction.UnsetSeen:
|
case MessageSetAction.UnsetSeen:
|
||||||
rootUids.forEach(sSubUid =>
|
rootUids.forEach(sSubUid =>
|
||||||
alreadyUnread += MessageFlagsCache.storeBySetAction(sFolderFullNameRaw, sSubUid, iSetAction)
|
alreadyUnread += MessageFlagsCache.storeBySetAction(sFolderFullName, sSubUid, iSetAction)
|
||||||
);
|
);
|
||||||
|
|
||||||
folder = getFolderFromCacheList(sFolderFullNameRaw);
|
folder = getFolderFromCacheList(sFolderFullName);
|
||||||
if (folder) {
|
if (folder) {
|
||||||
folder.messageCountUnread(folder.messageCountUnread() - alreadyUnread + rootUids.length);
|
folder.messageCountUnread(folder.messageCountUnread() - alreadyUnread + rootUids.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
Remote.messageSetSeen(null, sFolderFullNameRaw, rootUids, false);
|
Remote.messageSetSeen(null, sFolderFullName, rootUids, false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MessageSetAction.SetFlag:
|
case MessageSetAction.SetFlag:
|
||||||
rootUids.forEach(sSubUid =>
|
rootUids.forEach(sSubUid =>
|
||||||
MessageFlagsCache.storeBySetAction(sFolderFullNameRaw, sSubUid, iSetAction)
|
MessageFlagsCache.storeBySetAction(sFolderFullName, sSubUid, iSetAction)
|
||||||
);
|
);
|
||||||
|
|
||||||
Remote.messageSetFlagged(null, sFolderFullNameRaw, rootUids, true);
|
Remote.messageSetFlagged(null, sFolderFullName, rootUids, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MessageSetAction.UnsetFlag:
|
case MessageSetAction.UnsetFlag:
|
||||||
rootUids.forEach(sSubUid =>
|
rootUids.forEach(sSubUid =>
|
||||||
MessageFlagsCache.storeBySetAction(sFolderFullNameRaw, sSubUid, iSetAction)
|
MessageFlagsCache.storeBySetAction(sFolderFullName, sSubUid, iSetAction)
|
||||||
);
|
);
|
||||||
|
|
||||||
Remote.messageSetFlagged(null, sFolderFullNameRaw, rootUids, false);
|
Remote.messageSetFlagged(null, sFolderFullName, rootUids, false);
|
||||||
break;
|
break;
|
||||||
// no default
|
// no default
|
||||||
}
|
}
|
||||||
|
|
@ -734,7 +734,7 @@ class AppUser extends AbstractApp {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
const cF = FolderUserStore.currentFolderFullNameRaw(),
|
const cF = FolderUserStore.currentFolderFullName(),
|
||||||
iF = getFolderInboxName();
|
iF = getFolderInboxName();
|
||||||
this.folderInformation(iF);
|
this.folderInformation(iF);
|
||||||
if (iF !== cF) {
|
if (iF !== cF) {
|
||||||
|
|
@ -751,7 +751,7 @@ class AppUser extends AbstractApp {
|
||||||
this.accountsAndIdentities();
|
this.accountsAndIdentities();
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
const cF = FolderUserStore.currentFolderFullNameRaw();
|
const cF = FolderUserStore.currentFolderFullName();
|
||||||
if (getFolderInboxName() !== cF) {
|
if (getFolderInboxName() !== cF) {
|
||||||
this.folderInformation(cF);
|
this.folderInformation(cF);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,11 @@ export const
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} folderFullNameRaw
|
* @param {string} folderFullName
|
||||||
* @param {string} uid
|
* @param {string} uid
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
getMessageKey = (folderFullNameRaw, uid) => `${folderFullNameRaw}#${uid}`,
|
getMessageKey = (folderFullName, uid) => `${folderFullName}#${uid}`,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} folder
|
* @param {string} folder
|
||||||
|
|
@ -45,18 +45,18 @@ export const
|
||||||
hasRequestedMessage = (folder, uid) => true === REQUESTED_MESSAGE_CACHE[getMessageKey(folder, uid)],
|
hasRequestedMessage = (folder, uid) => true === REQUESTED_MESSAGE_CACHE[getMessageKey(folder, uid)],
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} folderFullNameRaw
|
* @param {string} folderFullName
|
||||||
* @param {string} uid
|
* @param {string} uid
|
||||||
*/
|
*/
|
||||||
addNewMessageCache = (folderFullNameRaw, uid) => NEW_MESSAGE_CACHE[getMessageKey(folderFullNameRaw, uid)] = true,
|
addNewMessageCache = (folderFullName, uid) => NEW_MESSAGE_CACHE[getMessageKey(folderFullName, uid)] = true,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} folderFullNameRaw
|
* @param {string} folderFullName
|
||||||
* @param {string} uid
|
* @param {string} uid
|
||||||
*/
|
*/
|
||||||
hasNewMessageAndRemoveFromCache = (folderFullNameRaw, uid) => {
|
hasNewMessageAndRemoveFromCache = (folderFullName, uid) => {
|
||||||
if (NEW_MESSAGE_CACHE[getMessageKey(folderFullNameRaw, uid)]) {
|
if (NEW_MESSAGE_CACHE[getMessageKey(folderFullName, uid)]) {
|
||||||
NEW_MESSAGE_CACHE[getMessageKey(folderFullNameRaw, uid)] = null;
|
NEW_MESSAGE_CACHE[getMessageKey(folderFullName, uid)] = null;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -81,60 +81,60 @@ export const
|
||||||
* @param {string} folderHash
|
* @param {string} folderHash
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
getFolderFullNameRaw = folderHash =>
|
getFolderFullName = folderHash =>
|
||||||
folderHash && FOLDERS_NAME_CACHE[folderHash] ? FOLDERS_NAME_CACHE[folderHash] : '',
|
folderHash && FOLDERS_NAME_CACHE[folderHash] ? FOLDERS_NAME_CACHE[folderHash] : '',
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} folderHash
|
* @param {string} folderHash
|
||||||
* @param {string} folderFullNameRaw
|
* @param {string} folderFullName
|
||||||
* @param {?FolderModel} folder
|
* @param {?FolderModel} folder
|
||||||
*/
|
*/
|
||||||
setFolder = (folderHash, folderFullNameRaw, folder) => {
|
setFolder = (folderHash, folderFullName, folder) => {
|
||||||
FOLDERS_CACHE[folderFullNameRaw] = folder;
|
FOLDERS_CACHE[folderFullName] = folder;
|
||||||
FOLDERS_NAME_CACHE[folderHash] = folderFullNameRaw;
|
FOLDERS_NAME_CACHE[folderHash] = folderFullName;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} folderFullNameRaw
|
* @param {string} folderFullName
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
getFolderHash = folderFullNameRaw =>
|
getFolderHash = folderFullName =>
|
||||||
folderFullNameRaw && FOLDERS_HASH_CACHE[folderFullNameRaw] ? FOLDERS_HASH_CACHE[folderFullNameRaw] : '',
|
folderFullName && FOLDERS_HASH_CACHE[folderFullName] ? FOLDERS_HASH_CACHE[folderFullName] : '',
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} folderFullNameRaw
|
* @param {string} folderFullName
|
||||||
* @param {string} folderHash
|
* @param {string} folderHash
|
||||||
*/
|
*/
|
||||||
setFolderHash = (folderFullNameRaw, folderHash) =>
|
setFolderHash = (folderFullName, folderHash) =>
|
||||||
folderFullNameRaw && (FOLDERS_HASH_CACHE[folderFullNameRaw] = folderHash),
|
folderFullName && (FOLDERS_HASH_CACHE[folderFullName] = folderHash),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} folderFullNameRaw
|
* @param {string} folderFullName
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
getFolderUidNext = folderFullNameRaw =>
|
getFolderUidNext = folderFullName =>
|
||||||
folderFullNameRaw && FOLDERS_UID_NEXT_CACHE[folderFullNameRaw]
|
folderFullName && FOLDERS_UID_NEXT_CACHE[folderFullName]
|
||||||
? FOLDERS_UID_NEXT_CACHE[folderFullNameRaw]
|
? FOLDERS_UID_NEXT_CACHE[folderFullName]
|
||||||
: '',
|
: '',
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} folderFullNameRaw
|
* @param {string} folderFullName
|
||||||
* @param {string} uidNext
|
* @param {string} uidNext
|
||||||
*/
|
*/
|
||||||
setFolderUidNext = (folderFullNameRaw, uidNext) =>
|
setFolderUidNext = (folderFullName, uidNext) =>
|
||||||
FOLDERS_UID_NEXT_CACHE[folderFullNameRaw] = uidNext,
|
FOLDERS_UID_NEXT_CACHE[folderFullName] = uidNext,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} folderFullNameRaw
|
* @param {string} folderFullName
|
||||||
* @returns {?FolderModel}
|
* @returns {?FolderModel}
|
||||||
*/
|
*/
|
||||||
getFolderFromCacheList = folderFullNameRaw =>
|
getFolderFromCacheList = folderFullName =>
|
||||||
folderFullNameRaw && FOLDERS_CACHE[folderFullNameRaw] ? FOLDERS_CACHE[folderFullNameRaw] : null,
|
folderFullName && FOLDERS_CACHE[folderFullName] ? FOLDERS_CACHE[folderFullName] : null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} folderFullNameRaw
|
* @param {string} folderFullName
|
||||||
*/
|
*/
|
||||||
removeFolderFromCacheList = folderFullNameRaw => delete FOLDERS_CACHE[folderFullNameRaw];
|
removeFolderFromCacheList = folderFullName => delete FOLDERS_CACHE[folderFullName];
|
||||||
|
|
||||||
export class MessageFlagsCache
|
export class MessageFlagsCache
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -67,9 +67,9 @@ export class FilterModel extends AbstractModel {
|
||||||
|
|
||||||
this.conditions = ko.observableArray();
|
this.conditions = ko.observableArray();
|
||||||
|
|
||||||
const fGetRealFolderName = (folderFullNameRaw) => {
|
const fGetRealFolderName = (folderFullName) => {
|
||||||
const folder = getFolderFromCacheList(folderFullNameRaw);
|
const folder = getFolderFromCacheList(folderFullName);
|
||||||
return folder ? folder.fullName.replace('.' === folder.delimiter ? /\./ : /[\\/]+/, ' / ') : folderFullNameRaw;
|
return folder ? folder.fullName.replace('.' === folder.delimiter ? /\./ : /[\\/]+/, ' / ') : folderFullName;
|
||||||
};
|
};
|
||||||
|
|
||||||
this.addComputables({
|
this.addComputables({
|
||||||
|
|
|
||||||
|
|
@ -21,10 +21,10 @@ import { i18n, trigger as translatorTrigger } from 'Common/Translator';
|
||||||
import { AbstractModel } from 'Knoin/AbstractModel';
|
import { AbstractModel } from 'Knoin/AbstractModel';
|
||||||
|
|
||||||
const
|
const
|
||||||
normalizeFolder = sFolderFullNameRaw => ('' === sFolderFullNameRaw
|
normalizeFolder = sFolderFullName => ('' === sFolderFullName
|
||||||
|| UNUSED_OPTION_VALUE === sFolderFullNameRaw
|
|| UNUSED_OPTION_VALUE === sFolderFullName
|
||||||
|| null !== Cache.getFolderFromCacheList(sFolderFullNameRaw))
|
|| null !== Cache.getFolderFromCacheList(sFolderFullName))
|
||||||
? sFolderFullNameRaw
|
? sFolderFullName
|
||||||
: '';
|
: '';
|
||||||
|
|
||||||
// index is FolderType value
|
// index is FolderType value
|
||||||
|
|
|
||||||
|
|
@ -171,18 +171,18 @@ class RemoteUserFetch extends AbstractFetchRemote {
|
||||||
*/
|
*/
|
||||||
messageList(fCallback, params, bSilent = false) {
|
messageList(fCallback, params, bSilent = false) {
|
||||||
const
|
const
|
||||||
sFolderFullNameRaw = pString(params.Folder),
|
sFolderFullName = pString(params.Folder),
|
||||||
folderHash = getFolderHash(sFolderFullNameRaw);
|
folderHash = getFolderHash(sFolderFullName);
|
||||||
|
|
||||||
params = Object.assign({
|
params = Object.assign({
|
||||||
Offset: 0,
|
Offset: 0,
|
||||||
Limit: SettingsUserStore.messagesPerPage(),
|
Limit: SettingsUserStore.messagesPerPage(),
|
||||||
Search: '',
|
Search: '',
|
||||||
UidNext: getFolderInboxName() === sFolderFullNameRaw ? getFolderUidNext(sFolderFullNameRaw) : '',
|
UidNext: getFolderInboxName() === sFolderFullName ? getFolderUidNext(sFolderFullName) : '',
|
||||||
Sort: FolderUserStore.sortMode(),
|
Sort: FolderUserStore.sortMode(),
|
||||||
Hash: folderHash + SettingsGet('AccountHash')
|
Hash: folderHash + SettingsGet('AccountHash')
|
||||||
}, params);
|
}, params);
|
||||||
params.Folder = sFolderFullNameRaw;
|
params.Folder = sFolderFullName;
|
||||||
if (AppUserStore.threadsAllowed() && SettingsUserStore.useThreads()) {
|
if (AppUserStore.threadsAllowed() && SettingsUserStore.useThreads()) {
|
||||||
params.UseThreads = 1;
|
params.UseThreads = 1;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -226,15 +226,15 @@ class RemoteUserFetch extends AbstractFetchRemote {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {?Function} fCallback
|
* @param {?Function} fCallback
|
||||||
* @param {string} sFolderFullNameRaw
|
* @param {string} sFolderFullName
|
||||||
* @param {number} iUid
|
* @param {number} iUid
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
message(fCallback, sFolderFullNameRaw, iUid) {
|
message(fCallback, sFolderFullName, iUid) {
|
||||||
sFolderFullNameRaw = pString(sFolderFullNameRaw);
|
sFolderFullName = pString(sFolderFullName);
|
||||||
iUid = pInt(iUid);
|
iUid = pInt(iUid);
|
||||||
|
|
||||||
if (getFolderFromCacheList(sFolderFullNameRaw) && 0 < iUid) {
|
if (getFolderFromCacheList(sFolderFullName) && 0 < iUid) {
|
||||||
this.defaultRequest(
|
this.defaultRequest(
|
||||||
fCallback,
|
fCallback,
|
||||||
'Message',
|
'Message',
|
||||||
|
|
@ -244,7 +244,7 @@ class RemoteUserFetch extends AbstractFetchRemote {
|
||||||
SUB_QUERY_PREFIX +
|
SUB_QUERY_PREFIX +
|
||||||
'/' +
|
'/' +
|
||||||
urlSafeJSON([
|
urlSafeJSON([
|
||||||
sFolderFullNameRaw,
|
sFolderFullName,
|
||||||
iUid,
|
iUid,
|
||||||
AppUserStore.threadsAllowed() && SettingsUserStore.useThreads() ? 1 : 0,
|
AppUserStore.threadsAllowed() && SettingsUserStore.useThreads() ? 1 : 0,
|
||||||
SettingsGet('AccountHash')
|
SettingsGet('AccountHash')
|
||||||
|
|
@ -350,13 +350,13 @@ class RemoteUserFetch extends AbstractFetchRemote {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {?Function} fCallback
|
* @param {?Function} fCallback
|
||||||
* @param {string} sFolderFullNameRaw
|
* @param {string} sFolderFullName
|
||||||
* @param {Array} aUids
|
* @param {Array} aUids
|
||||||
* @param {boolean} bSetFlagged
|
* @param {boolean} bSetFlagged
|
||||||
*/
|
*/
|
||||||
messageSetFlagged(fCallback, sFolderFullNameRaw, aUids, bSetFlagged) {
|
messageSetFlagged(fCallback, sFolderFullName, aUids, bSetFlagged) {
|
||||||
this.defaultRequest(fCallback, 'MessageSetFlagged', {
|
this.defaultRequest(fCallback, 'MessageSetFlagged', {
|
||||||
Folder: sFolderFullNameRaw,
|
Folder: sFolderFullName,
|
||||||
Uids: aUids.join(','),
|
Uids: aUids.join(','),
|
||||||
SetAction: bSetFlagged ? 1 : 0
|
SetAction: bSetFlagged ? 1 : 0
|
||||||
});
|
});
|
||||||
|
|
@ -364,13 +364,13 @@ class RemoteUserFetch extends AbstractFetchRemote {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {?Function} fCallback
|
* @param {?Function} fCallback
|
||||||
* @param {string} sFolderFullNameRaw
|
* @param {string} sFolderFullName
|
||||||
* @param {Array} aUids
|
* @param {Array} aUids
|
||||||
* @param {boolean} bSetSeen
|
* @param {boolean} bSetSeen
|
||||||
*/
|
*/
|
||||||
messageSetSeen(fCallback, sFolderFullNameRaw, aUids, bSetSeen) {
|
messageSetSeen(fCallback, sFolderFullName, aUids, bSetSeen) {
|
||||||
this.defaultRequest(fCallback, 'MessageSetSeen', {
|
this.defaultRequest(fCallback, 'MessageSetSeen', {
|
||||||
Folder: sFolderFullNameRaw,
|
Folder: sFolderFullName,
|
||||||
Uids: aUids.join(','),
|
Uids: aUids.join(','),
|
||||||
SetAction: bSetSeen ? 1 : 0
|
SetAction: bSetSeen ? 1 : 0
|
||||||
});
|
});
|
||||||
|
|
@ -378,13 +378,13 @@ class RemoteUserFetch extends AbstractFetchRemote {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {?Function} fCallback
|
* @param {?Function} fCallback
|
||||||
* @param {string} sFolderFullNameRaw
|
* @param {string} sFolderFullName
|
||||||
* @param {boolean} bSetSeen
|
* @param {boolean} bSetSeen
|
||||||
* @param {Array} aThreadUids = null
|
* @param {Array} aThreadUids = null
|
||||||
*/
|
*/
|
||||||
messageSetSeenToAll(fCallback, sFolderFullNameRaw, bSetSeen, aThreadUids = null) {
|
messageSetSeenToAll(fCallback, sFolderFullName, bSetSeen, aThreadUids = null) {
|
||||||
this.defaultRequest(fCallback, 'MessageSetSeenToAll', {
|
this.defaultRequest(fCallback, 'MessageSetSeenToAll', {
|
||||||
Folder: sFolderFullNameRaw,
|
Folder: sFolderFullName,
|
||||||
SetAction: bSetSeen ? 1 : 0,
|
SetAction: bSetSeen ? 1 : 0,
|
||||||
ThreadUids: aThreadUids ? aThreadUids.join(',') : ''
|
ThreadUids: aThreadUids ? aThreadUids.join(',') : ''
|
||||||
});
|
});
|
||||||
|
|
@ -453,34 +453,34 @@ class RemoteUserFetch extends AbstractFetchRemote {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {?Function} fCallback
|
* @param {?Function} fCallback
|
||||||
* @param {string} sFolderFullNameRaw
|
* @param {string} sFolderFullName
|
||||||
*/
|
*/
|
||||||
folderClear(fCallback, sFolderFullNameRaw) {
|
folderClear(fCallback, sFolderFullName) {
|
||||||
this.defaultRequest(fCallback, 'FolderClear', {
|
this.defaultRequest(fCallback, 'FolderClear', {
|
||||||
Folder: sFolderFullNameRaw
|
Folder: sFolderFullName
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {?Function} fCallback
|
* @param {?Function} fCallback
|
||||||
* @param {string} sFolderFullNameRaw
|
* @param {string} sFolderFullName
|
||||||
* @param {boolean} bSubscribe
|
* @param {boolean} bSubscribe
|
||||||
*/
|
*/
|
||||||
folderSetSubscribe(fCallback, sFolderFullNameRaw, bSubscribe) {
|
folderSetSubscribe(fCallback, sFolderFullName, bSubscribe) {
|
||||||
this.defaultRequest(fCallback, 'FolderSubscribe', {
|
this.defaultRequest(fCallback, 'FolderSubscribe', {
|
||||||
Folder: sFolderFullNameRaw,
|
Folder: sFolderFullName,
|
||||||
Subscribe: bSubscribe ? 1 : 0
|
Subscribe: bSubscribe ? 1 : 0
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {?Function} fCallback
|
* @param {?Function} fCallback
|
||||||
* @param {string} sFolderFullNameRaw
|
* @param {string} sFolderFullName
|
||||||
* @param {boolean} bSubscribe
|
* @param {boolean} bSubscribe
|
||||||
*/
|
*/
|
||||||
folderSetMetadata(fCallback, sFolderFullNameRaw, sKey, sValue) {
|
folderSetMetadata(fCallback, sFolderFullName, sKey, sValue) {
|
||||||
this.defaultRequest(fCallback, 'FolderSetMetadata', {
|
this.defaultRequest(fCallback, 'FolderSetMetadata', {
|
||||||
Folder: sFolderFullNameRaw,
|
Folder: sFolderFullName,
|
||||||
Key: sKey,
|
Key: sKey,
|
||||||
Value: sValue
|
Value: sValue
|
||||||
});
|
});
|
||||||
|
|
@ -488,12 +488,12 @@ class RemoteUserFetch extends AbstractFetchRemote {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {?Function} fCallback
|
* @param {?Function} fCallback
|
||||||
* @param {string} sFolderFullNameRaw
|
* @param {string} sFolderFullName
|
||||||
* @param {boolean} bCheckable
|
* @param {boolean} bCheckable
|
||||||
*/
|
*/
|
||||||
folderSetCheckable(fCallback, sFolderFullNameRaw, bCheckable) {
|
folderSetCheckable(fCallback, sFolderFullName, bCheckable) {
|
||||||
this.defaultRequest(fCallback, 'FolderCheckable', {
|
this.defaultRequest(fCallback, 'FolderCheckable', {
|
||||||
Folder: sFolderFullNameRaw,
|
Folder: sFolderFullName,
|
||||||
Checkable: bCheckable ? 1 : 0
|
Checkable: bCheckable ? 1 : 0
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -662,9 +662,9 @@ class RemoteUserFetch extends AbstractFetchRemote {
|
||||||
this.foldersTimeout = setTimeout(() => this.foldersReload(), 500);
|
this.foldersTimeout = setTimeout(() => this.foldersReload(), 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
folderDelete(sFolderFullNameRaw) {
|
folderDelete(sFolderFullName) {
|
||||||
return this.postRequest('FolderDelete', FolderUserStore.foldersDeleting, {
|
return this.postRequest('FolderDelete', FolderUserStore.foldersDeleting, {
|
||||||
Folder: sFolderFullNameRaw
|
Folder: sFolderFullName
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -675,16 +675,16 @@ class RemoteUserFetch extends AbstractFetchRemote {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
folderMove(sPrevFolderFullNameRaw, sNewFolderFullName) {
|
folderMove(sPrevFolderFullName, sNewFolderFullName) {
|
||||||
return this.postRequest('FolderMove', FolderUserStore.foldersRenaming, {
|
return this.postRequest('FolderMove', FolderUserStore.foldersRenaming, {
|
||||||
Folder: sPrevFolderFullNameRaw,
|
Folder: sPrevFolderFullName,
|
||||||
NewFolder: sNewFolderFullName
|
NewFolder: sNewFolderFullName
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
folderRename(sPrevFolderFullNameRaw, sNewFolderName) {
|
folderRename(sPrevFolderFullName, sNewFolderName) {
|
||||||
return this.postRequest('FolderRename', FolderUserStore.foldersRenaming, {
|
return this.postRequest('FolderRename', FolderUserStore.foldersRenaming, {
|
||||||
Folder: sPrevFolderFullNameRaw,
|
Folder: sPrevFolderFullName,
|
||||||
NewFolderName: sNewFolderName
|
NewFolderName: sNewFolderName
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import { Layout, ClientSideKeyName } from 'Common/EnumsUser';
|
||||||
import { doc, leftPanelDisabled, moveAction, Settings, elementById } from 'Common/Globals';
|
import { doc, leftPanelDisabled, moveAction, Settings, elementById } from 'Common/Globals';
|
||||||
import { pString, pInt } from 'Common/Utils';
|
import { pString, pInt } from 'Common/Utils';
|
||||||
import { setLayoutResizer } from 'Common/UtilsUser';
|
import { setLayoutResizer } from 'Common/UtilsUser';
|
||||||
import { getFolderFromCacheList, getFolderFullNameRaw, getFolderInboxName } from 'Common/Cache';
|
import { getFolderFromCacheList, getFolderFullName, getFolderInboxName } from 'Common/Cache';
|
||||||
import { i18n } from 'Common/Translator';
|
import { i18n } from 'Common/Translator';
|
||||||
import { SettingsUserStore } from 'Stores/User/Settings';
|
import { SettingsUserStore } from 'Stores/User/Settings';
|
||||||
|
|
||||||
|
|
@ -64,7 +64,7 @@ export class MailBoxUserScreen extends AbstractScreen {
|
||||||
* @returns {void}
|
* @returns {void}
|
||||||
*/
|
*/
|
||||||
onRoute(folderHash, page, search) {
|
onRoute(folderHash, page, search) {
|
||||||
const folder = getFolderFromCacheList(getFolderFullNameRaw(folderHash.replace(/~([\d]+)$/, '')));
|
const folder = getFolderFromCacheList(getFolderFullName(folderHash.replace(/~([\d]+)$/, '')));
|
||||||
if (folder) {
|
if (folder) {
|
||||||
let threadUid = folderHash.replace(/^.+~(\d+)$/, '$1');
|
let threadUid = folderHash.replace(/^.+~(\d+)$/, '$1');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,9 +27,9 @@ ContactUserStore.sync = fResultFunc => {
|
||||||
&& !ContactUserStore.syncing()
|
&& !ContactUserStore.syncing()
|
||||||
) {
|
) {
|
||||||
ContactUserStore.syncing(true);
|
ContactUserStore.syncing(true);
|
||||||
Remote.contactsSync((sResult, oData) => {
|
Remote.contactsSync((iError, oData) => {
|
||||||
ContactUserStore.syncing(false);
|
ContactUserStore.syncing(false);
|
||||||
fResultFunc && fResultFunc(sResult, oData);
|
fResultFunc && fResultFunc(iError, oData);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -44,8 +44,7 @@ ContactUserStore.init = () => {
|
||||||
ContactUserStore.syncPass(SettingsGet('ContactsSyncPassword'));
|
ContactUserStore.syncPass(SettingsGet('ContactsSyncPassword'));
|
||||||
setTimeout(ContactUserStore.sync, 10000);
|
setTimeout(ContactUserStore.sync, 10000);
|
||||||
value = pInt(SettingsGet('ContactsSyncInterval'));
|
value = pInt(SettingsGet('ContactsSyncInterval'));
|
||||||
value = 5 <= value ? value : 20;
|
value = 5 <= value ? (320 >= value ? value : 320) : 20;
|
||||||
value = 320 >= value ? value : 320;
|
|
||||||
setInterval(ContactUserStore.sync, value * 60000 + 5000);
|
setInterval(ContactUserStore.sync, value * 60000 + 5000);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -56,8 +56,6 @@ export const FolderUserStore = new class {
|
||||||
|
|
||||||
draftFolderNotEnabled: () => !self.draftFolder() || UNUSED_OPTION_VALUE === self.draftFolder(),
|
draftFolderNotEnabled: () => !self.draftFolder() || UNUSED_OPTION_VALUE === self.draftFolder(),
|
||||||
|
|
||||||
currentFolderFullNameRaw: () => (self.currentFolder() ? self.currentFolder().fullName : ''),
|
|
||||||
|
|
||||||
currentFolderFullName: () => (self.currentFolder() ? self.currentFolder().fullName : ''),
|
currentFolderFullName: () => (self.currentFolder() ? self.currentFolder().fullName : ''),
|
||||||
currentFolderFullNameHash: () => (self.currentFolder() ? self.currentFolder().fullNameHash : ''),
|
currentFolderFullNameHash: () => (self.currentFolder() ? self.currentFolder().fullNameHash : ''),
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -267,12 +267,12 @@ export const MessageUserStore = new class {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} fromFolderFullNameRaw
|
* @param {string} fromFolderFullName
|
||||||
* @param {Array} uidForRemove
|
* @param {Array} uidForRemove
|
||||||
* @param {string=} toFolderFullNameRaw = ''
|
* @param {string=} toFolderFullName = ''
|
||||||
* @param {boolean=} copy = false
|
* @param {boolean=} copy = false
|
||||||
*/
|
*/
|
||||||
removeMessagesFromList(fromFolderFullNameRaw, uidForRemove, toFolderFullNameRaw = '', copy = false) {
|
removeMessagesFromList(fromFolderFullName, uidForRemove, toFolderFullName = '', copy = false) {
|
||||||
uidForRemove = uidForRemove.map(mValue => pInt(mValue));
|
uidForRemove = uidForRemove.map(mValue => pInt(mValue));
|
||||||
|
|
||||||
let unseenCount = 0,
|
let unseenCount = 0,
|
||||||
|
|
@ -281,11 +281,10 @@ export const MessageUserStore = new class {
|
||||||
|
|
||||||
const trashFolder = FolderUserStore.trashFolder(),
|
const trashFolder = FolderUserStore.trashFolder(),
|
||||||
spamFolder = FolderUserStore.spamFolder(),
|
spamFolder = FolderUserStore.spamFolder(),
|
||||||
fromFolder = getFolderFromCacheList(fromFolderFullNameRaw),
|
fromFolder = getFolderFromCacheList(fromFolderFullName),
|
||||||
toFolder = toFolderFullNameRaw ? getFolderFromCacheList(toFolderFullNameRaw) : null,
|
toFolder = toFolderFullName ? getFolderFromCacheList(toFolderFullName) : null,
|
||||||
currentFolderFullNameRaw = FolderUserStore.currentFolderFullNameRaw(),
|
|
||||||
messages =
|
messages =
|
||||||
currentFolderFullNameRaw === fromFolderFullNameRaw
|
FolderUserStore.currentFolderFullName() === fromFolderFullName
|
||||||
? messageList.filter(item => item && uidForRemove.includes(pInt(item.uid)))
|
? messageList.filter(item => item && uidForRemove.includes(pInt(item.uid)))
|
||||||
: [];
|
: [];
|
||||||
|
|
||||||
|
|
@ -339,12 +338,12 @@ export const MessageUserStore = new class {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fromFolderFullNameRaw) {
|
if (fromFolderFullName) {
|
||||||
setFolderHash(fromFolderFullNameRaw, '');
|
setFolderHash(fromFolderFullName, '');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (toFolderFullNameRaw) {
|
if (toFolderFullName) {
|
||||||
setFolderHash(toFolderFullNameRaw, '');
|
setFolderHash(toFolderFullName, '');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.listThreadUid()) {
|
if (this.listThreadUid()) {
|
||||||
|
|
@ -635,7 +634,7 @@ export const MessageUserStore = new class {
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
calculateMessageListHash(list) {
|
calculateMessageListHash(list) {
|
||||||
return list.map(message => '' + message.hash + '_' + message.threadsLen() + '_' + message.flagHash()).join(
|
return list.map(message => message.hash + '_' + message.threadsLen() + '_' + message.flagHash()).join(
|
||||||
'|'
|
'|'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import ko from 'ko';
|
|
||||||
|
|
||||||
import { SMAudio } from 'Common/Audio';
|
import { SMAudio } from 'Common/Audio';
|
||||||
import * as Links from 'Common/Links';
|
import * as Links from 'Common/Links';
|
||||||
|
import { addObservablesTo } from 'Common/Utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Might not work due to the new ServiceWorkerRegistration.showNotification
|
* Might not work due to the new ServiceWorkerRegistration.showNotification
|
||||||
|
|
@ -36,11 +35,13 @@ if (WorkerNotifications && ServiceWorkerRegistration && ServiceWorkerRegistratio
|
||||||
|
|
||||||
export const NotificationUserStore = new class {
|
export const NotificationUserStore = new class {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.enableSoundNotification = ko.observable(false);
|
addObservablesTo(this, {
|
||||||
|
enableSoundNotification: false,
|
||||||
|
|
||||||
this.enableDesktopNotification = ko.observable(false)/*.extend({ notify: 'always' })*/;
|
enableDesktopNotification: false,/*.extend({ notify: 'always' })*/
|
||||||
|
|
||||||
this.isDesktopNotificationAllowed = ko.observable(!NotificationsDenied());
|
isDesktopNotificationAllowed: !NotificationsDenied()
|
||||||
|
});
|
||||||
|
|
||||||
this.enableDesktopNotification.subscribe(value => {
|
this.enableDesktopNotification.subscribe(value => {
|
||||||
DesktopNotifications = !!value;
|
DesktopNotifications = !!value;
|
||||||
|
|
|
||||||
|
|
@ -571,7 +571,7 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
const draftFolder = FolderUserStore.draftFolder();
|
const draftFolder = FolderUserStore.draftFolder();
|
||||||
if (draftFolder && UNUSED_OPTION_VALUE !== draftFolder) {
|
if (draftFolder && UNUSED_OPTION_VALUE !== draftFolder) {
|
||||||
setFolderHash(draftFolder, '');
|
setFolderHash(draftFolder, '');
|
||||||
if (FolderUserStore.currentFolderFullNameRaw() === draftFolder) {
|
if (FolderUserStore.currentFolderFullName() === draftFolder) {
|
||||||
rl.app.reloadMessageList(true);
|
rl.app.reloadMessageList(true);
|
||||||
} else {
|
} else {
|
||||||
rl.app.folderInformation(draftFolder);
|
rl.app.folderInformation(draftFolder);
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ export class MailFolderList extends AbstractViewLeft {
|
||||||
if (moveAction()) {
|
if (moveAction()) {
|
||||||
moveAction(false);
|
moveAction(false);
|
||||||
rl.app.moveMessagesToFolder(
|
rl.app.moveMessagesToFolder(
|
||||||
FolderUserStore.currentFolderFullNameRaw(),
|
FolderUserStore.currentFolderFullName(),
|
||||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||||
folder.fullName,
|
folder.fullName,
|
||||||
event.ctrlKey
|
event.ctrlKey
|
||||||
|
|
@ -96,7 +96,7 @@ export class MailFolderList extends AbstractViewLeft {
|
||||||
MessageUserStore.message(null);
|
MessageUserStore.message(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (folder.fullName === FolderUserStore.currentFolderFullNameRaw()) {
|
if (folder.fullName === FolderUserStore.currentFolderFullName()) {
|
||||||
setFolderHash(folder.fullName, '');
|
setFolderHash(folder.fullName, '');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
|
|
||||||
folderMenuForMove: () =>
|
folderMenuForMove: () =>
|
||||||
folderListOptionsBuilder(
|
folderListOptionsBuilder(
|
||||||
[FolderUserStore.currentFolderFullNameRaw()],
|
[FolderUserStore.currentFolderFullName()],
|
||||||
[],
|
[],
|
||||||
item => item ? item.localName() : ''
|
item => item ? item.localName() : ''
|
||||||
),
|
),
|
||||||
|
|
@ -279,7 +279,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
if (Settings.capa(Capa.DangerousActions)) {
|
if (Settings.capa(Capa.DangerousActions)) {
|
||||||
rl.app.deleteMessagesFromFolder(
|
rl.app.deleteMessagesFromFolder(
|
||||||
FolderType.Trash,
|
FolderType.Trash,
|
||||||
FolderUserStore.currentFolderFullNameRaw(),
|
FolderUserStore.currentFolderFullName(),
|
||||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
|
@ -289,7 +289,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
deleteCommand() {
|
deleteCommand() {
|
||||||
rl.app.deleteMessagesFromFolder(
|
rl.app.deleteMessagesFromFolder(
|
||||||
FolderType.Trash,
|
FolderType.Trash,
|
||||||
FolderUserStore.currentFolderFullNameRaw(),
|
FolderUserStore.currentFolderFullName(),
|
||||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
@ -298,7 +298,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
archiveCommand() {
|
archiveCommand() {
|
||||||
rl.app.deleteMessagesFromFolder(
|
rl.app.deleteMessagesFromFolder(
|
||||||
FolderType.Archive,
|
FolderType.Archive,
|
||||||
FolderUserStore.currentFolderFullNameRaw(),
|
FolderUserStore.currentFolderFullName(),
|
||||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
@ -307,7 +307,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
spamCommand() {
|
spamCommand() {
|
||||||
rl.app.deleteMessagesFromFolder(
|
rl.app.deleteMessagesFromFolder(
|
||||||
FolderType.Spam,
|
FolderType.Spam,
|
||||||
FolderUserStore.currentFolderFullNameRaw(),
|
FolderUserStore.currentFolderFullName(),
|
||||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
@ -316,7 +316,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
notSpamCommand() {
|
notSpamCommand() {
|
||||||
rl.app.deleteMessagesFromFolder(
|
rl.app.deleteMessagesFromFolder(
|
||||||
FolderType.NotSpam,
|
FolderType.NotSpam,
|
||||||
FolderUserStore.currentFolderFullNameRaw(),
|
FolderUserStore.currentFolderFullName(),
|
||||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
@ -413,16 +413,16 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} sToFolderFullNameRaw
|
* @param {string} sToFolderFullName
|
||||||
* @param {boolean} bCopy
|
* @param {boolean} bCopy
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
moveSelectedMessagesToFolder(sToFolderFullNameRaw, bCopy) {
|
moveSelectedMessagesToFolder(sToFolderFullName, bCopy) {
|
||||||
if (MessageUserStore.hasCheckedOrSelected()) {
|
if (MessageUserStore.hasCheckedOrSelected()) {
|
||||||
rl.app.moveMessagesToFolder(
|
rl.app.moveMessagesToFolder(
|
||||||
FolderUserStore.currentFolderFullNameRaw(),
|
FolderUserStore.currentFolderFullName(),
|
||||||
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
MessageUserStore.listCheckedOrSelectedUidsWithSubMails(),
|
||||||
sToFolderFullNameRaw,
|
sToFolderFullName,
|
||||||
bCopy
|
bCopy
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -437,37 +437,37 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
item && !uids.includes(item.uid) && uids.push(item.uid);
|
item && !uids.includes(item.uid) && uids.push(item.uid);
|
||||||
return uids.length ? {
|
return uids.length ? {
|
||||||
copy: event.ctrlKey,
|
copy: event.ctrlKey,
|
||||||
folder: FolderUserStore.currentFolderFullNameRaw(),
|
folder: FolderUserStore.currentFolderFullName(),
|
||||||
uids: uids
|
uids: uids
|
||||||
} : null;
|
} : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} sFolderFullNameRaw
|
* @param {string} sFolderFullName
|
||||||
* @param {number} iSetAction
|
* @param {number} iSetAction
|
||||||
* @param {Array=} aMessages = null
|
* @param {Array=} aMessages = null
|
||||||
* @returns {void}
|
* @returns {void}
|
||||||
*/
|
*/
|
||||||
setAction(sFolderFullNameRaw, iSetAction, aMessages) {
|
setAction(sFolderFullName, iSetAction, aMessages) {
|
||||||
rl.app.messageListAction(sFolderFullNameRaw, iSetAction, aMessages);
|
rl.app.messageListAction(sFolderFullName, iSetAction, aMessages);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} sFolderFullNameRaw
|
* @param {string} sFolderFullName
|
||||||
* @param {number} iSetAction
|
* @param {number} iSetAction
|
||||||
* @param {number} iThreadUid = ''
|
* @param {number} iThreadUid = ''
|
||||||
* @returns {void}
|
* @returns {void}
|
||||||
*/
|
*/
|
||||||
setActionForAll(sFolderFullNameRaw, iSetAction, iThreadUid = 0) {
|
setActionForAll(sFolderFullName, iSetAction, iThreadUid = 0) {
|
||||||
if (sFolderFullNameRaw) {
|
if (sFolderFullName) {
|
||||||
let cnt = 0;
|
let cnt = 0;
|
||||||
const uids = [];
|
const uids = [];
|
||||||
|
|
||||||
let folder = getFolderFromCacheList(sFolderFullNameRaw);
|
let folder = getFolderFromCacheList(sFolderFullName);
|
||||||
if (folder) {
|
if (folder) {
|
||||||
switch (iSetAction) {
|
switch (iSetAction) {
|
||||||
case MessageSetAction.SetSeen:
|
case MessageSetAction.SetSeen:
|
||||||
folder = getFolderFromCacheList(sFolderFullNameRaw);
|
folder = getFolderFromCacheList(sFolderFullName);
|
||||||
if (folder) {
|
if (folder) {
|
||||||
MessageUserStore.list.forEach(message => {
|
MessageUserStore.list.forEach(message => {
|
||||||
if (message.isUnseen()) {
|
if (message.isUnseen()) {
|
||||||
|
|
@ -487,13 +487,13 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
folder.messageCountUnread(0);
|
folder.messageCountUnread(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
MessageFlagsCache.clearFolder(sFolderFullNameRaw);
|
MessageFlagsCache.clearFolder(sFolderFullName);
|
||||||
}
|
}
|
||||||
|
|
||||||
Remote.messageSetSeenToAll(null, sFolderFullNameRaw, true, iThreadUid ? uids : null);
|
Remote.messageSetSeenToAll(null, sFolderFullName, true, iThreadUid ? uids : null);
|
||||||
break;
|
break;
|
||||||
case MessageSetAction.UnsetSeen:
|
case MessageSetAction.UnsetSeen:
|
||||||
folder = getFolderFromCacheList(sFolderFullNameRaw);
|
folder = getFolderFromCacheList(sFolderFullName);
|
||||||
if (folder) {
|
if (folder) {
|
||||||
MessageUserStore.list.forEach(message => {
|
MessageUserStore.list.forEach(message => {
|
||||||
if (!message.isUnseen()) {
|
if (!message.isUnseen()) {
|
||||||
|
|
@ -513,10 +513,10 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
folder.messageCountUnread(folder.messageCountAll());
|
folder.messageCountUnread(folder.messageCountAll());
|
||||||
}
|
}
|
||||||
|
|
||||||
MessageFlagsCache.clearFolder(sFolderFullNameRaw);
|
MessageFlagsCache.clearFolder(sFolderFullName);
|
||||||
}
|
}
|
||||||
|
|
||||||
Remote.messageSetSeenToAll(null, sFolderFullNameRaw, false, iThreadUid ? uids : null);
|
Remote.messageSetSeenToAll(null, sFolderFullName, false, iThreadUid ? uids : null);
|
||||||
break;
|
break;
|
||||||
// no default
|
// no default
|
||||||
}
|
}
|
||||||
|
|
@ -528,7 +528,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
|
|
||||||
listSetSeen() {
|
listSetSeen() {
|
||||||
this.setAction(
|
this.setAction(
|
||||||
FolderUserStore.currentFolderFullNameRaw(),
|
FolderUserStore.currentFolderFullName(),
|
||||||
MessageSetAction.SetSeen,
|
MessageSetAction.SetSeen,
|
||||||
MessageUserStore.listCheckedOrSelected()
|
MessageUserStore.listCheckedOrSelected()
|
||||||
);
|
);
|
||||||
|
|
@ -536,7 +536,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
|
|
||||||
listSetAllSeen() {
|
listSetAllSeen() {
|
||||||
this.setActionForAll(
|
this.setActionForAll(
|
||||||
FolderUserStore.currentFolderFullNameRaw(),
|
FolderUserStore.currentFolderFullName(),
|
||||||
MessageSetAction.SetSeen,
|
MessageSetAction.SetSeen,
|
||||||
MessageUserStore.listEndThreadUid()
|
MessageUserStore.listEndThreadUid()
|
||||||
);
|
);
|
||||||
|
|
@ -544,7 +544,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
|
|
||||||
listUnsetSeen() {
|
listUnsetSeen() {
|
||||||
this.setAction(
|
this.setAction(
|
||||||
FolderUserStore.currentFolderFullNameRaw(),
|
FolderUserStore.currentFolderFullName(),
|
||||||
MessageSetAction.UnsetSeen,
|
MessageSetAction.UnsetSeen,
|
||||||
MessageUserStore.listCheckedOrSelected()
|
MessageUserStore.listCheckedOrSelected()
|
||||||
);
|
);
|
||||||
|
|
@ -552,7 +552,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
|
|
||||||
listSetFlags() {
|
listSetFlags() {
|
||||||
this.setAction(
|
this.setAction(
|
||||||
FolderUserStore.currentFolderFullNameRaw(),
|
FolderUserStore.currentFolderFullName(),
|
||||||
MessageSetAction.SetFlag,
|
MessageSetAction.SetFlag,
|
||||||
MessageUserStore.listCheckedOrSelected()
|
MessageUserStore.listCheckedOrSelected()
|
||||||
);
|
);
|
||||||
|
|
@ -560,7 +560,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
|
|
||||||
listUnsetFlags() {
|
listUnsetFlags() {
|
||||||
this.setAction(
|
this.setAction(
|
||||||
FolderUserStore.currentFolderFullNameRaw(),
|
FolderUserStore.currentFolderFullName(),
|
||||||
MessageSetAction.UnsetFlag,
|
MessageSetAction.UnsetFlag,
|
||||||
MessageUserStore.listCheckedOrSelected()
|
MessageUserStore.listCheckedOrSelected()
|
||||||
);
|
);
|
||||||
|
|
@ -704,7 +704,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
name: 'AppendFile',
|
name: 'AppendFile',
|
||||||
limit: 1,
|
limit: 1,
|
||||||
hidden: {
|
hidden: {
|
||||||
Folder: () => FolderUserStore.currentFolderFullNameRaw()
|
Folder: () => FolderUserStore.currentFolderFullName()
|
||||||
},
|
},
|
||||||
dragAndDropElement: this.dragOverArea(),
|
dragAndDropElement: this.dragOverArea(),
|
||||||
dragAndDropBodyElement: this.dragOverBodyArea()
|
dragAndDropBodyElement: this.dragOverBodyArea()
|
||||||
|
|
|
||||||
|
|
@ -176,8 +176,8 @@ export class MailMessageView extends AbstractViewRight {
|
||||||
return '';
|
return '';
|
||||||
},
|
},
|
||||||
|
|
||||||
messageListAndMessageViewLoading:
|
messageListOrViewLoading:
|
||||||
() => MessageUserStore.listCompleteLoading() || MessageUserStore.messageLoading()
|
() => MessageUserStore.listCompleteLoading() | MessageUserStore.messageLoading()
|
||||||
});
|
});
|
||||||
|
|
||||||
this.addSubscribables({
|
this.addSubscribables({
|
||||||
|
|
@ -258,8 +258,8 @@ export class MailMessageView extends AbstractViewRight {
|
||||||
decorateKoCommands(this, {
|
decorateKoCommands(this, {
|
||||||
closeMessageCommand: 1,
|
closeMessageCommand: 1,
|
||||||
messageEditCommand: self => self.messageVisibility(),
|
messageEditCommand: self => self.messageVisibility(),
|
||||||
goUpCommand: self => !self.messageListAndMessageViewLoading(),
|
goUpCommand: self => !self.messageListOrViewLoading(),
|
||||||
goDownCommand: self => !self.messageListAndMessageViewLoading()
|
goDownCommand: self => !self.messageListOrViewLoading()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue