diff --git a/app/providers/DialogProvider/useDialogFiber.ts b/app/providers/DialogProvider/useDialogFiber.ts index 8daa29a..de5a59f 100644 --- a/app/providers/DialogProvider/useDialogFiber.ts +++ b/app/providers/DialogProvider/useDialogFiber.ts @@ -425,6 +425,43 @@ export function useDialogFiber() { } }, [blocked, muted, updateDialog, focused, currentDialogPublicKeyView, viewState, idle]); + /** + * Обработчик синхронизации прочтения личных сообщений + */ + usePacket(0x07, async (packet: PacketRead) => { + if(hasGroup(packet.getToPublicKey())){ + /** + * Если это относится к группам, то игнорируем здесь, + * для этого есть отдельный слушатель usePacket ниже + */ + return; + } + const fromPublicKey = packet.getFromPublicKey(); + if(fromPublicKey != publicKey){ + /** + * Игнорируем если это не наше прочтение + */ + return; + } + + const toPublicKey = packet.getToPublicKey(); + await runQuery(`UPDATE messages SET read = 1 WHERE from_public_key = ? AND to_public_key = ? AND account = ?`, + [fromPublicKey, toPublicKey, publicKey]); + updateDialog(toPublicKey); + log("Read sync packet from other device"); + addOrUpdateDialogCache(fromPublicKey, getDialogCache(fromPublicKey).map((message) => { + if (message.from_public_key == toPublicKey && !message.readed) { + console.info("Marking message as read in cache for dialog with " + fromPublicKey); + console.info({fromPublicKey, toPublicKey}); + return { + ...message, + readed: 1 + } + } + return message; + })); + }, [updateDialog]); + /** * Обработчик прочтения личных сообщений */