1 parent
e4aa787e06
commit
27a53c3c6a
16 files changed
+71
-5668
No files matched your search
@@ -91,21 +91,35 @@ async function moveMessageByDrag(fromFolder, uid, targetFolder) {
|
||||
toast(`Moved to ${targetFolder}`, "success", 9000, moveUndoAction(result));
|
||||
}
|
||||
|
||||
function nextMessageTargetAfterRemoval(folder, uid) {
|
||||
const index = state.messages.findIndex((message) => message.uid === uid && (message.folder || state.folder) === folder);
|
||||
if (index < 0) return null;
|
||||
const message = state.messages[index + 1] || state.messages[index - 1];
|
||||
if (!message) return null;
|
||||
return { folder: message.folder || state.folder, uid: message.uid };
|
||||
}
|
||||
|
||||
async function removeCurrentMessageFromView(folder, uid, nextTarget) {
|
||||
state.messages = state.messages.filter((message) => !(message.uid === uid && (message.folder || state.folder) === folder));
|
||||
state.selectedMessages.delete(`${folder}\u0000${uid}`);
|
||||
state.total = Math.max(0, state.total - 1);
|
||||
state.selected = null;
|
||||
state.currentDetail = null;
|
||||
renderMessages();
|
||||
if (nextTarget) await openMessage(nextTarget.folder, nextTarget.uid);
|
||||
else closeReader();
|
||||
}
|
||||
|
||||
async function moveCurrentTo(targetFolder, successMessage = null) {
|
||||
if (!state.currentDetail || !targetFolder || targetFolder === state.currentDetail.folder) return;
|
||||
const detail = state.currentDetail;
|
||||
const nextTarget = nextMessageTargetAfterRemoval(detail.folder, detail.uid);
|
||||
try {
|
||||
const result = await request("/messages/move", {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ from_folder: detail.folder, to_folder: targetFolder, uid: detail.uid }),
|
||||
});
|
||||
state.messages = state.messages.filter((msg) => !(msg.uid === detail.uid && (msg.folder || state.folder) === detail.folder));
|
||||
state.selectedMessages.delete(`${detail.folder}\u0000${detail.uid}`);
|
||||
state.total = Math.max(0, state.total - 1);
|
||||
state.selected = null;
|
||||
state.currentDetail = null;
|
||||
closeReader();
|
||||
renderMessages();
|
||||
await removeCurrentMessageFromView(detail.folder, detail.uid, nextTarget);
|
||||
await refreshFolderListOnly();
|
||||
toast(successMessage || `Moved to ${targetFolder}`, "success", 9000, moveUndoAction(result));
|
||||
} catch (error) { toast(error.message, "error"); }
|
||||
@@ -185,15 +199,10 @@ async function deleteCurrent() {
|
||||
return;
|
||||
}
|
||||
if (!await appConfirm("Permanently delete this message?", { title: "Delete message permanently", confirmLabel: "Delete permanently", danger: true })) return;
|
||||
const nextTarget = nextMessageTargetAfterRemoval(folder, uid);
|
||||
try {
|
||||
await request(`/messages/${encodeURIComponent(folder)}/${uid}`, { method: "DELETE" });
|
||||
state.messages = state.messages.filter((msg) => !(msg.uid === uid && (msg.folder || state.folder) === folder));
|
||||
state.selectedMessages.delete(`${folder}\u0000${uid}`);
|
||||
state.total = Math.max(0, state.total - 1);
|
||||
state.selected = null;
|
||||
state.currentDetail = null;
|
||||
closeReader();
|
||||
renderMessages();
|
||||
await removeCurrentMessageFromView(folder, uid, nextTarget);
|
||||
await refreshFolderListOnly();
|
||||
toast("Message deleted", "success");
|
||||
} catch (error) { toast(error.message, "error"); }
|
||||
|
||||
Reference in new issue
Block a user