Compare commits
2 Commits
b821c89e20
...
843659b495
Author | SHA1 | Date | |
---|---|---|---|
|
843659b495 | ||
|
1a7828b281 |
@ -4,6 +4,7 @@ import { getMessageUid, getUserOfMailbox } from "../db/utils/mail";
|
||||
import emailManager from "../mails/EmailManager";
|
||||
import { deleteMessage } from "../db/message/updateMessage-db";
|
||||
import logger from "../system/Logger";
|
||||
import { deleteRoom, getRoomNbMessage, getRoomOnMessageId } from "../db/Room-db";
|
||||
|
||||
export default class Message {
|
||||
static async addFlag(body, res: Response) {
|
||||
@ -68,7 +69,8 @@ export default class Message {
|
||||
const mailbox = emailManager.getImap(user).getMailbox(mailboxId);
|
||||
|
||||
// add flag for deletion
|
||||
mailbox.addFlag(uid.toString(), ["\\Deleted"])
|
||||
mailbox
|
||||
.addFlag(uid.toString(), ["\\Deleted"])
|
||||
.then(() => {
|
||||
// move message to trash
|
||||
mailbox.moveToTrash(uid.toString(), (err) => {
|
||||
@ -84,7 +86,6 @@ export default class Message {
|
||||
logger.log(err);
|
||||
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
static async deleteEverywhere(body, res: Response) {
|
||||
@ -92,26 +93,37 @@ export default class Message {
|
||||
const uid = (await getMessageUid(messageId))[0]?.uid;
|
||||
if (!uid) {
|
||||
res.status(statusCode.NOT_FOUND).send({ error: "Message uid not found." });
|
||||
return;
|
||||
}
|
||||
|
||||
const user = (await getUserOfMailbox(mailboxId))[0]?.user;
|
||||
if (!user) {
|
||||
res.status(statusCode.NOT_FOUND).send({ error: "Not account for this mailbox." });
|
||||
return;
|
||||
}
|
||||
|
||||
const roomId = (await getRoomOnMessageId(messageId))[0]?.room_id;
|
||||
|
||||
emailManager
|
||||
.getImap(user)
|
||||
.getMailbox(mailboxId)
|
||||
.removeFlag(uid.toString(), ["\\Deleted"])
|
||||
.then(() => {
|
||||
deleteMessage(messageId)
|
||||
.then((result) => {
|
||||
// todo check if room is empty
|
||||
res.status(statusCode.OK).send();
|
||||
})
|
||||
.catch((err) => {
|
||||
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
||||
console.log(err);
|
||||
});
|
||||
.then(async () => {
|
||||
try {
|
||||
await deleteMessage(messageId);
|
||||
if (roomId) {
|
||||
const nbMessage = (await getRoomNbMessage(roomId))[0].nbMessage;
|
||||
if (nbMessage > 0) {
|
||||
res.status(statusCode.OK).send();
|
||||
} else {
|
||||
await deleteRoom(roomId);
|
||||
res.status(statusCode.OK).json({ deleteRoom: true }).send();
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
||||
console.log(err);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
|
@ -31,8 +31,6 @@ export default class Room {
|
||||
res.status(statusCode.OK).send();
|
||||
} else if (roomType === RoomType.GROUP || roomType === RoomType.THREAD) {
|
||||
const lastMsgData = (await getLastMsgData(roomId))[0];
|
||||
console.log(lastMsgData);
|
||||
|
||||
const mailBuilder = new MailBuilder();
|
||||
mailBuilder.inReplySubject(lastMsgData.subject).inReplyTo(lastMsgData.messageID).text(text).html(html);
|
||||
|
||||
|
@ -12,8 +12,10 @@ export async function getRoomOwner(roomId: number) {
|
||||
return await execQueryAsync(query, values);
|
||||
}
|
||||
|
||||
/**
|
||||
* get all the data needed to reply to a message in a room
|
||||
*/
|
||||
export async function getLastMsgData(roomId: number) {
|
||||
|
||||
const query = `
|
||||
SELECT
|
||||
msg.message_id AS id,
|
||||
@ -59,3 +61,21 @@ export async function getLastMsgData(roomId: number) {
|
||||
const values = [roomId];
|
||||
return await execQueryAsync(query, values);
|
||||
}
|
||||
|
||||
export async function getRoomOnMessageId(messageId: number) {
|
||||
const query = `SELECT room_id FROM app_room_message WHERE message_id = ?`;
|
||||
const values = [messageId];
|
||||
return await execQueryAsync(query, values);
|
||||
}
|
||||
|
||||
export async function getRoomNbMessage(roomId: number) {
|
||||
const query = `SELECT COUNT(room_id) AS nbMessage FROM app_room_message WHERE room_id = ?`;
|
||||
const values = [roomId];
|
||||
return await execQueryAsync(query, values);
|
||||
}
|
||||
|
||||
export async function deleteRoom(roomId: number) {
|
||||
const query = `DELETE FROM app_room WHERE room_id = ?`;
|
||||
const values = [roomId];
|
||||
return await execQueryAsync(query, values);
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ CREATE TABLE app_room (
|
||||
room_id INT AUTO_INCREMENT,
|
||||
room_name VARCHAR(255) NOT NULL,
|
||||
owner_id INT NOT NULL,
|
||||
message_id INT NOT NULL,
|
||||
message_id INT,
|
||||
room_type INT NOT NULL DEFAULT 0,
|
||||
lastUpdate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
|
||||
PRIMARY KEY (room_id),
|
||||
|
@ -35,7 +35,6 @@ export async function getMailbox(mailboxId: number) {
|
||||
}
|
||||
|
||||
export function updateMailbox(mailboxId: number, uidnext: number) {
|
||||
console.log("updateMailbox", mailboxId, uidnext);
|
||||
const query = `UPDATE mailbox SET uidnext = ? WHERE mailbox_id = ?`;
|
||||
const values = [uidnext, mailboxId];
|
||||
execQuery(query, values);
|
||||
|
@ -137,7 +137,7 @@ export default class Mailbox {
|
||||
} catch (error) {
|
||||
logger.err("Failed to sync message " + error);
|
||||
}
|
||||
logger.log(`Saved messages ${i + STEP > nbMessageToSync ? nbMessageToSync : i + STEP}/${nbMessageToSync}`);
|
||||
logger.log(`Saved messages in uids ${i + STEP > nbMessageToSync ? nbMessageToSync : i + STEP}/${nbMessageToSync}`);
|
||||
}
|
||||
|
||||
// if has receive new msg during last sync then start a new sync
|
||||
|
@ -35,7 +35,7 @@ if (shouldReset) {
|
||||
if (table.table_name == "mailbox") return;
|
||||
console.log(table.table_name);
|
||||
execQuery("DELETE FROM " + table.table_name, []);
|
||||
// execQuery("DROP TABLE " + table.table_name);
|
||||
// execQuery("DROP TABLE " + table.table_name, []);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -50,7 +50,11 @@ const deleteEverywhere = () => {
|
||||
deletionLoading.value = true;
|
||||
API.deleteEverywhere({ mailboxId: room.value?.mailboxId, messageId: props.msg?.id })
|
||||
.then((res) => {
|
||||
// delete even if we delete the room after because the transition between room is not clean (todo)
|
||||
store.commit("removeMsg", { roomId: room.value?.id, messageId: props.msg?.id });
|
||||
if (res.data?.deleteRoom) {
|
||||
store.commit("removeRoom", { roomId: room.value?.id });
|
||||
}
|
||||
deletionLoading.value = false;
|
||||
})
|
||||
.catch((err) => {
|
||||
|
@ -132,6 +132,14 @@ const store = createStore<State>({
|
||||
}
|
||||
});
|
||||
},
|
||||
removeRoom(state, payload) {
|
||||
const roomMessageIndex = state.roomMessages.findIndex((roomM) => roomM.roomId === payload.roomId);
|
||||
state.roomMessages.splice(roomMessageIndex, 1);
|
||||
const roomIndex = state.rooms.findIndex((room) => room.id === payload.roomId);
|
||||
state.rooms.splice(roomIndex, 1);
|
||||
// state.activeRoom = state.rooms[0].id;
|
||||
// router.push(`/${state.activeRoom}`);
|
||||
},
|
||||
addMessages(state, payload) {
|
||||
// todo add if not exist
|
||||
const room = roomOnId(state, payload.roomId);
|
||||
@ -174,6 +182,12 @@ const store = createStore<State>({
|
||||
const msgs = msgOnRoomId(state, payload.roomId);
|
||||
const msgIndex = msgs?.messages.findIndex((msg) => msg.id == payload.messageId) ?? -1;
|
||||
if (msgs && msgIndex != -1) {
|
||||
if (!isSeenFc(msgs.messages[msgIndex].flags)) {
|
||||
const room = roomOnId(state, payload.roomId);
|
||||
if (room) {
|
||||
room.notSeen = room.notSeen - 1;
|
||||
}
|
||||
}
|
||||
msgs.messages.splice(msgIndex, 1);
|
||||
}
|
||||
},
|
||||
|
@ -51,6 +51,7 @@ function openMessageView(messageId) {
|
||||
|
||||
const shouldBeCompact = (index) => {
|
||||
// show last three messages
|
||||
// todo fix not changing three displayed when deleting
|
||||
if (messages.value?.length - 4 < index) return false;
|
||||
return true;
|
||||
};
|
||||
|
@ -1,3 +1,8 @@
|
||||
<script lang="ts" setup>
|
||||
import Accounts from "./accounts/Accounts.vue";
|
||||
import Rooms from "./rooms/Rooms.vue";
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<Accounts class="accounts" />
|
||||
@ -5,19 +10,6 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Accounts from "./accounts/Accounts";
|
||||
import Rooms from "./rooms/Rooms.vue";
|
||||
|
||||
export default {
|
||||
name: "Sidebar",
|
||||
components: {
|
||||
Accounts,
|
||||
Rooms,
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
div {
|
||||
display: flex;
|
||||
|
Loading…
Reference in New Issue
Block a user