Slightly modified patch code of #1657

This commit is contained in:
the-djmaze 2024-07-11 01:31:58 +02:00
parent 95436347e5
commit 50e30dbb6e
47 changed files with 135 additions and 8 deletions

View file

@ -112,7 +112,7 @@ export class AppUser extends AbstractApp {
case FolderType.Trash:
oMoveFolder = getFolderFromCacheList(FolderUserStore.trashFolder());
nSetSystemFoldersNotification = iFolderType;
bDelete = bDelete || UNUSED_OPTION_VALUE === FolderUserStore.trashFolder()
bDelete = bDelete/* || UNUSED_OPTION_VALUE === FolderUserStore.trashFolder()*/
|| sFromFolderFullName === FolderUserStore.spamFolder()
|| sFromFolderFullName === FolderUserStore.trashFolder();
break;

View file

@ -71,7 +71,9 @@ MessageSetAction = {
SetSeen: 0,
UnsetSeen: 1,
SetFlag: 2,
UnsetFlag: 3
UnsetFlag: 3,
SetDeleted: 4,
UnsetDeleted: 5
},
/**

View file

@ -206,6 +206,7 @@ export class MessageModel extends AbstractModel {
isUnseen: () => !this.flags().includes('\\seen'),
isFlagged: () => this.flags().includes('\\flagged'),
isDeleted: () => this.flags().includes('\\deleted'),
// isJunk: () => this.flags().includes('$junk') && !this.flags().includes('$nonjunk'),
// isPhishing: () => this.flags().includes('$phishing'),
@ -363,7 +364,7 @@ export class MessageModel extends AbstractModel {
lineAsCss(flags=1) {
let classes = [];
forEachObjectEntry({
deleted: this.deleted(),
deleted: this.deleted() || this.isDeleted(),
selected: this.selected(),
checked: this.checked(),
unseen: this.isUnseen(),

View file

@ -36,6 +36,7 @@ import { baseCollator } from 'Common/Translator';
const
isChecked = item => item.checked(),
isDeleted = item => item.isDeleted(),
replaceHash = hash => {
rl.route.off();
hasher.replaceHash(hash);
@ -142,6 +143,14 @@ MessagelistUserStore.hasCheckedOrSelected = koComputable(() =>
| !!MessagelistUserStore.find(isChecked)
).extend({ rateLimit: 50 });
MessagelistUserStore.hasCheckedOrSelectedAndDeleted = koComputable(
() => !!MessagelistUserStore.listCheckedOrSelected().find(isDeleted)
).extend({ rateLimit: 50 });
MessagelistUserStore.hasCheckedOrSelectedAndUndeleted = koComputable(
() => !!MessagelistUserStore.listCheckedOrSelected().find(item => !item?.isDeleted())
).extend({ rateLimit: 50 });
MessagelistUserStore.notifyNewMessages = (folder, newMessages) => {
if (getFolderInboxName() === folder && arrayLength(newMessages)) {
@ -370,6 +379,14 @@ MessagelistUserStore.setAction = (sFolderFullName, iSetAction, messages) => {
messages.forEach(oMessage =>
oMessage.isFlagged() && rootUids.push(oMessage.uid) && oMessage.flags.remove('\\flagged')
);
} else if (iSetAction == MessageSetAction.SetDeleted) {
messages.forEach(oMessage =>
!oMessage.isDeleted() && rootUids.push(oMessage.uid) && oMessage.flags.push('\\deleted')
);
} else if (iSetAction == MessageSetAction.UnsetDeleted) {
messages.forEach(oMessage =>
oMessage.isDeleted() && rootUids.push(oMessage.uid) && oMessage.flags.remove('\\deleted')
);
}
rootUids = rootUids.validUnique();
length = rootUids.length;
@ -399,6 +416,15 @@ MessagelistUserStore.setAction = (sFolderFullName, iSetAction, messages) => {
setAction: iSetAction == MessageSetAction.SetFlag ? 1 : 0
});
break;
case MessageSetAction.SetDeleted:
case MessageSetAction.UnsetDeleted:
Remote.request('MessageSetDeleted', null, {
folder: sFolderFullName,
uids: rootUids.join(','),
setAction: iSetAction == MessageSetAction.SetDeleted ? 1 : 0
});
break;
// no default
}
}

View file

@ -33,6 +33,10 @@ input:-webkit-autofill:active {
transition: color 9999s ease-out, background-color 9999s ease-out;
}
[data-icon].rotate::before {
transform: rotate(-180deg);
}
/*
@media (pointer: coarse), (hover: none) {
[title] {

View file

@ -1,6 +1,7 @@
import ko from 'ko';
import { addObservablesTo, addComputablesTo } from 'External/ko';
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
import { ScopeFolderList, ScopeMessageList, ScopeMessageView } from 'Common/Enums';
import { ComposeType, FolderType, MessageSetAction } from 'Common/EnumsUser';
import { doc,
@ -326,7 +327,8 @@ export class MailMessageList extends AbstractViewRight {
downloadZipCommand: canBeMovedHelper,
forwardCommand: canBeMovedHelper,
deleteWithoutMoveCommand: canBeMovedHelper,
deleteCommand: canBeMovedHelper,
deleteCommand: () => MessagelistUserStore.hasCheckedOrSelectedAndUndeleted(),
undeleteCommand: () => MessagelistUserStore.hasCheckedOrSelectedAndDeleted(),
archiveCommand: canBeMovedHelper,
spamCommand: canBeMovedHelper,
notSpamCommand: canBeMovedHelper,
@ -400,8 +402,27 @@ export class MailMessageList extends AbstractViewRight {
&& moveMessagesToFolderType(FolderType.Trash, true);
}
// User setting hideDeleted || immediatelyMoveToTrash ??
deleteCommand() {
moveMessagesToFolderType(FolderType.Trash);
// moveMessagesToFolderType(FolderType.Trash);
if (UNUSED_OPTION_VALUE === FolderUserStore.trashFolder() || '' === FolderUserStore.trashFolder()) {
listAction(
FolderUserStore.currentFolderFullName(),
MessageSetAction.SetDeleted,
MessagelistUserStore.listCheckedOrSelected()
);
} else {
moveMessagesToFolderType(FolderType.Trash);
}
}
// User setting !hideDeleted && !immediatelyMoveToTrash ??
undeleteCommand() {
listAction(
FolderUserStore.currentFolderFullName(),
MessageSetAction.UnsetDeleted,
MessagelistUserStore.listCheckedOrSelected()
);
}
archiveCommand() {

View file

@ -1,6 +1,7 @@
import ko from 'ko';
import { addObservablesTo, addComputablesTo, addSubscribablesTo } from 'External/ko';
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
import { ScopeFolderList, ScopeMessageList, ScopeMessageView } from 'Common/Enums';
import {
@ -99,6 +100,20 @@ export class MailMessageView extends AbstractViewRight {
currentMessage(null);
rl.app.moveMessagesToFolderType(folderType, message.folder, new Set([message.uid]), bDelete);
}
}, this.messageVisible),
createCommandSetHelper = action =>
createCommand(() => setAction(action), this.messageVisible),
createCommandDeleteHelper = () =>
createCommand(() => {
if (UNUSED_OPTION_VALUE === FolderUserStore.trashFolder() || '' === FolderUserStore.trashFolder()) {
setAction(MessageSetAction.SetDeleted);
} else {
const message = currentMessage();
if (message) {
currentMessage(null);
rl.app.moveMessagesToFolderType(FolderType.Trash, message.folder, new Set([message.uid]));
}
}
}, this.messageVisible);
this.msgDefaultAction = SettingsUserStore.msgDefaultAction;
@ -197,6 +212,8 @@ export class MailMessageView extends AbstractViewRight {
pgpSupported: () => currentMessage() && PgpUserStore.isSupported(),
canBeUndeleted: () => currentMessage()?.isDeleted(),
messageListOrViewLoading:
() => MessagelistUserStore.isLoading() | MessageUserStore.loading()
});
@ -231,7 +248,11 @@ export class MailMessageView extends AbstractViewRight {
this.forwardAsAttachmentCommand = createCommandReplyHelper(ComposeType.ForwardAsAttachment);
this.editAsNewCommand = createCommandReplyHelper(ComposeType.EditAsNew);
this.deleteCommand = createCommandActionHelper(FolderType.Trash);
// this.deleteCommand = createCommandActionHelper(FolderType.Trash);
// User setting hideDeleted || immediatelyMoveToTrash ??
this.deleteCommand = createCommandDeleteHelper();
// User setting !hideDeleted && !immediatelyMoveToTrash ??
this.undeleteCommand = createCommandSetHelper(MessageSetAction.UnsetDeleted);
this.deleteWithoutMoveCommand = createCommandActionHelper(FolderType.Trash, true);
this.archiveCommand = createCommandActionHelper(FolderType.Archive);
this.spamCommand = createCommandActionHelper(FolderType.Junk);