From 40ff99e66d6e1a45523f02e21c2593c453069745 Mon Sep 17 00:00:00 2001 From: RoyceDa Date: Fri, 13 Feb 2026 17:44:48 +0200 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D1=8F=20=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B2=D0=BD=D1=83=D1=82=D1=80=D0=B8?= =?UTF-8?q?=20=D0=B4=D0=B8=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DialogProvider/DialogProvider.tsx | 49 ++++++++++++++++++- .../DialogProvider/useDialogFiber.ts | 1 - 2 files changed, 48 insertions(+), 2 deletions(-) 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]);