Синхронизация сообщений в активном диалоге
This commit is contained in:
@@ -350,6 +350,60 @@ export function DialogProvider(props: DialogProviderProps) {
|
|||||||
}));
|
}));
|
||||||
}, [props.dialog]);
|
}, [props.dialog]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Нам приходят сообщения от себя самих же при синхронизации
|
||||||
|
* нужно обрабатывать их особым образом соотвественно
|
||||||
|
*
|
||||||
|
* Метод нужен для синхронизации своих сообщений
|
||||||
|
*/
|
||||||
|
usePacket(0x06, async (packet: PacketMessage) => {
|
||||||
|
const fromPublicKey = packet.getFromPublicKey();
|
||||||
|
const toPublicKey = packet.getToPublicKey();
|
||||||
|
const aesChachaKey = packet.getAesChachaKey();
|
||||||
|
const content = packet.getContent();
|
||||||
|
const timestamp = packet.getTimestamp();
|
||||||
|
const messageId = packet.getMessageId();
|
||||||
|
|
||||||
|
|
||||||
|
if(fromPublicKey != publicKey){
|
||||||
|
/**
|
||||||
|
* Игнорируем если это не сообщение от нас
|
||||||
|
*/
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const chachaDecryptedKey = Buffer.from(await decodeWithPassword(privatePlain, aesChachaKey), "binary");
|
||||||
|
const key = chachaDecryptedKey.slice(0, 32);
|
||||||
|
const nonce = chachaDecryptedKey.slice(32);
|
||||||
|
const decryptedContent = await chacha20Decrypt(content, nonce.toString('hex'), key.toString('hex'));
|
||||||
|
|
||||||
|
let attachments: Attachment[] = [];
|
||||||
|
for(let i = 0; i < packet.getAttachments().length; i++) {
|
||||||
|
const attachment = packet.getAttachments()[i];
|
||||||
|
attachments.push({
|
||||||
|
id: attachment.id,
|
||||||
|
preview: attachment.preview,
|
||||||
|
type: attachment.type,
|
||||||
|
blob: attachment.type == AttachmentType.MESSAGES ? await decodeWithPassword(chachaDecryptedKey.toString('utf-8'), attachment.blob) : ""
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const newMessage: Message = {
|
||||||
|
from_public_key: fromPublicKey,
|
||||||
|
to_public_key: toPublicKey,
|
||||||
|
content: content,
|
||||||
|
timestamp: timestamp,
|
||||||
|
readed: 0, //сообщение прочитано
|
||||||
|
chacha_key: chachaDecryptedKey.toString('utf-8'),
|
||||||
|
from_me: 1, //сообщение от нас
|
||||||
|
plain_message: (decryptedContent as string),
|
||||||
|
delivered: DeliveredMessageState.DELIVERED,
|
||||||
|
message_id: messageId,
|
||||||
|
attachments: attachments
|
||||||
|
};
|
||||||
|
|
||||||
|
setMessages((prev) => ([...prev, newMessage]));
|
||||||
|
}, [privatePlain]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обработчик для личных сообщений
|
* Обработчик для личных сообщений
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import { PacketRead } from "../ProtocolProvider/protocol/packets/packet.read";
|
|||||||
import { PacketDelivery } from "../ProtocolProvider/protocol/packets/packet.delivery";
|
import { PacketDelivery } from "../ProtocolProvider/protocol/packets/packet.delivery";
|
||||||
import { useConsoleLogger } from "@/app/hooks/useConsoleLogger";
|
import { useConsoleLogger } from "@/app/hooks/useConsoleLogger";
|
||||||
import { useViewPanelsState, ViewPanelsState } from "@/app/hooks/useViewPanelsState";
|
import { useViewPanelsState, ViewPanelsState } from "@/app/hooks/useViewPanelsState";
|
||||||
import { generateRandomKeyFormSeed } from "@/app/utils/utils";
|
|
||||||
import { useFileStorage } from "@/app/hooks/useFileStorage";
|
import { useFileStorage } from "@/app/hooks/useFileStorage";
|
||||||
import { useDialogsList } from "../DialogListProvider/useDialogsList";
|
import { useDialogsList } from "../DialogListProvider/useDialogsList";
|
||||||
import { useGroups } from "./useGroups";
|
import { useGroups } from "./useGroups";
|
||||||
@@ -58,7 +57,6 @@ export function useDialogFiber() {
|
|||||||
info("Starting passive fiber for dialog packets");
|
info("Starting passive fiber for dialog packets");
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Нам приходят сообщения от себя самих же при синхронизации
|
* Нам приходят сообщения от себя самих же при синхронизации
|
||||||
* нужно обрабатывать их особым образом соотвественно
|
* нужно обрабатывать их особым образом соотвественно
|
||||||
|
|||||||
Reference in New Issue
Block a user