diff --git a/app/providers/DialogProvider/DialogProvider.tsx b/app/providers/DialogProvider/DialogProvider.tsx index ef383fb..59410e9 100644 --- a/app/providers/DialogProvider/DialogProvider.tsx +++ b/app/providers/DialogProvider/DialogProvider.tsx @@ -282,9 +282,18 @@ export function DialogProvider(props: DialogProviderProps) { lastMessageTimeRef.current = messages[messages.length - 1].timestamp; }, [props.dialog, viewState, focus, messages, blocked, idle]); + /** + * Обработчик чтения для личных сообщений + */ usePacket(0x07, async (packet : PacketRead) => { info("Read packet received in dialog provider"); const fromPublicKey = packet.getFromPublicKey(); + if(fromPublicKey == publicKey){ + /** + * Если это пакет синхронизации прочтения то игнорируем его здесь, для него есть другой обработчик + */ + return; + } if(hasGroup(props.dialog)){ /** * Для групп обработка чтения есть ниже @@ -306,9 +315,18 @@ export function DialogProvider(props: DialogProviderProps) { //updateDialog(props.dialog); }, [idle, props.dialog]); + /** + * Обработчик чтения групповых сообщений + */ usePacket(0x07, async (packet : PacketRead) => { info("Read packet received in dialog provider"); - //const fromPublicKey = packet.getFromPublicKey(); + const fromPublicKey = packet.getFromPublicKey(); + if(fromPublicKey == publicKey){ + /** + * Если это пакет синхронизации прочтения то игнорируем его здесь, для него есть другой обработчик + */ + return; + } const toPublicKey = packet.getToPublicKey(); if(!hasGroup(props.dialog)){ /** @@ -331,6 +349,35 @@ export function DialogProvider(props: DialogProviderProps) { //updateDialog(props.dialog); }, [idle, props.dialog]); + /** + * Обработчик синхронизации чтения + */ + usePacket(0x07, async (packet : PacketRead) => { + const fromPublicKey = packet.getFromPublicKey(); + const toPublicKey = packet.getToPublicKey(); + if(fromPublicKey != publicKey){ + /** + * Это не пакет синхронизации, игнорируем + */ + return; + } + if(toPublicKey != props.dialog){ + /** + * Относится не к этому диалогу + */ + return; + } + setMessages((prev) => prev.map((msg) => { + if(msg.from_public_key == toPublicKey && !msg.readed){ + return { + ...msg, + readed: 1 + } + } + return msg; + })); + }, [publicKey]); + usePacket(0x08, async (packet : PacketDelivery) => { info("Delivery packet received in dialog provider"); const fromPublicKey = packet.getToPublicKey(); diff --git a/app/providers/DialogProvider/useDialogFiber.ts b/app/providers/DialogProvider/useDialogFiber.ts index dc26e69..ce312fe 100644 --- a/app/providers/DialogProvider/useDialogFiber.ts +++ b/app/providers/DialogProvider/useDialogFiber.ts @@ -445,7 +445,6 @@ export function useDialogFiber() { return; } console.info("PACKED_READ_SYNC"); - debugger; await runQuery(`UPDATE messages SET read = 1 WHERE from_public_key = ? AND to_public_key = ? AND account = ?`, [toPublicKey, fromPublicKey, publicKey]);