mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
On folder/mailbox rename, also rename all children instead of reloading all
This commit is contained in:
parent
195f14ccb8
commit
2cdc8d0055
1 changed files with 29 additions and 13 deletions
|
|
@ -488,9 +488,13 @@ export class FolderModel extends AbstractModel {
|
||||||
rename(nameToEdit, parentName) {
|
rename(nameToEdit, parentName) {
|
||||||
nameToEdit = nameToEdit.trim();
|
nameToEdit = nameToEdit.trim();
|
||||||
const folder = this,
|
const folder = this,
|
||||||
parentFolder = getFolderFromCacheList(parentName),
|
oldParent = getFolderFromCacheList(folder.parentName),
|
||||||
|
newParent = getFolderFromCacheList(parentName),
|
||||||
|
folderList = FolderUserStore.folderList,
|
||||||
|
newFolderList = newParent ? newParent.subFolders : folderList,
|
||||||
|
delimiter = (newParent || folder).delimiter,
|
||||||
oldFullname = folder.fullName,
|
oldFullname = folder.fullName,
|
||||||
newFullname = (parentFolder ? (parentName + parentFolder.delimiter) : '') + nameToEdit;
|
newFullname = (newParent ? parentName + delimiter : '') + nameToEdit;
|
||||||
if (nameToEdit && newFullname != oldFullname) {
|
if (nameToEdit && newFullname != oldFullname) {
|
||||||
Remote.abort('Folders').post('FolderRename', FolderUserStore.foldersRenaming, {
|
Remote.abort('Folders').post('FolderRename', FolderUserStore.foldersRenaming, {
|
||||||
oldName: oldFullname,
|
oldName: oldFullname,
|
||||||
|
|
@ -498,21 +502,33 @@ export class FolderModel extends AbstractModel {
|
||||||
subscribe: folder.isSubscribed() ? 1 : 0
|
subscribe: folder.isSubscribed() ? 1 : 0
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
folder.fullName = newFullname;
|
const
|
||||||
folder.name(nameToEdit);
|
renameFolder = (folder, parent) => {
|
||||||
if (folder.subFolders.length || folder.parentName != parentName) {
|
removeFolderFromCacheList(folder.fullName);
|
||||||
Remote.setTrigger(FolderUserStore.foldersLoading, true);
|
folder.parentName = (parent ? parent.fullName : '');
|
||||||
// clearTimeout(Remote.foldersTimeout);
|
folder.fullName = (parent ? parent.fullName + delimiter : '') + folder.name();
|
||||||
// Remote.foldersTimeout = setTimeout(loadFolders, 500);
|
folder.delimiter = delimiter;
|
||||||
setTimeout(loadFolders, 500);
|
folder.deep = (parent ? parent.deep : -1) + 1;
|
||||||
// TODO: rename all subfolders with folder.delimiter to prevent reload?
|
|
||||||
} else {
|
|
||||||
removeFolderFromCacheList(oldFullname);
|
|
||||||
setFolder(folder);
|
setFolder(folder);
|
||||||
sortFolders(parentFolder ? parentFolder.subFolders : FolderUserStore.folderList);
|
},
|
||||||
|
renameChildren = folder => {
|
||||||
|
folder.subFolders.forEach(child => {
|
||||||
|
renameFolder(child, folder);
|
||||||
|
renameChildren(child);
|
||||||
|
})
|
||||||
|
};
|
||||||
|
folder.name(nameToEdit);
|
||||||
|
renameFolder(folder, newParent);
|
||||||
|
if (folder.subFolders.length || newParent != oldParent) {
|
||||||
|
// Rename all subfolders to prevent reload
|
||||||
|
renameChildren(folder);
|
||||||
}
|
}
|
||||||
|
(oldParent ? oldParent.subFolders : folderList).remove(folder);
|
||||||
|
newFolderList.push(folder);
|
||||||
|
sortFolders(newFolderList);
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
|
console.error(error);
|
||||||
FolderUserStore.error(
|
FolderUserStore.error(
|
||||||
getNotification(error.code, '', Notifications.CantRenameFolder)
|
getNotification(error.code, '', Notifications.CantRenameFolder)
|
||||||
+ '.\n' + error.message);
|
+ '.\n' + error.message);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue