This commit is contained in:
rosetta
2026-02-01 01:10:18 +02:00
2 changed files with 39 additions and 2 deletions

View File

@@ -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]);
/**
* Обработчик прочтения личных сообщений
*/

View File

@@ -52,13 +52,13 @@ export default class Protocol extends EventEmitter {
_this.emit('handshake_complete');
_this.handshakeExchangeComplete = true;
_this._flushPacketQueue();
this.startHeartbeat(packet.getHeartbeatInterval());
_this.startHeartbeat(packet.getHeartbeatInterval());
}
if(packet.getHandshakeState() == HandshakeState.NEED_DEVICE_VERIFICATION) {
console.info('[protocol] %chandshake exchange need device verification', 'color: orange;');
_this.emit('handshake_need_device_verification');
_this._packetQueue = [];
this.startHeartbeat(packet.getHeartbeatInterval());
_this.startHeartbeat(packet.getHeartbeatInterval());
}
});