Синхронизация прочтения в группах и фикс синхронизации сообщений в группах
This commit is contained in:
@@ -27,7 +27,7 @@ import { useDialogsCache } from "./useDialogsCache";
|
||||
import { PacketRead } from "../ProtocolProvider/protocol/packets/packet.read";
|
||||
import { useLogger } from "@/app/hooks/useLogger";
|
||||
import { useIdle } from "@mantine/hooks";
|
||||
import { useViewPanelsState, ViewPanelsState } from "@/app/hooks/useViewPanelsState";
|
||||
import { useViewPanelsState } from "@/app/hooks/useViewPanelsState";
|
||||
import { useWindowFocus } from "@/app/hooks/useWindowFocus";
|
||||
|
||||
/**
|
||||
@@ -145,6 +145,13 @@ export function useSynchronize() {
|
||||
const content = packet.getContent();
|
||||
const timestamp = packet.getTimestamp();
|
||||
const messageId = packet.getMessageId();
|
||||
if(hasGroup(toPublicKey)){
|
||||
/**
|
||||
* Игнорируем если это сообщение для группы, для них есть отдельный слушатель usePacket ниже
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
if (fromPublicKey != publicKey) {
|
||||
/**
|
||||
* Игнорируем если это не сообщение от нас
|
||||
@@ -262,6 +269,43 @@ export function useSynchronize() {
|
||||
}));
|
||||
});
|
||||
}, [updateDialog, publicKey]);
|
||||
|
||||
/**
|
||||
* Обработчик синхронизации прочтения групповых сообщений
|
||||
*/
|
||||
usePacket(0x07, async (packet: PacketRead) => {
|
||||
runTaskInQueue(async () => {
|
||||
const fromPublicKey = packet.getFromPublicKey();
|
||||
const toPublicKey = packet.getToPublicKey();
|
||||
if (!hasGroup(toPublicKey)) {
|
||||
/**
|
||||
* Если это не относится к группам, то игнорируем здесь,
|
||||
* для этого есть отдельный слушатель usePacket выше
|
||||
*/
|
||||
return;
|
||||
}
|
||||
if(fromPublicKey != publicKey){
|
||||
/**
|
||||
* Игнорируем если это наше прочтение
|
||||
* которое получается при синхронизации
|
||||
*/
|
||||
return;
|
||||
}
|
||||
await runQuery(`UPDATE messages SET read = 1 WHERE to_public_key = ? AND from_public_key != ? AND account = ?`,
|
||||
[toPublicKey, publicKey, publicKey]);
|
||||
await updateSyncTime(Date.now());
|
||||
updateDialog(toPublicKey);
|
||||
addOrUpdateDialogCache(toPublicKey, getDialogCache(toPublicKey).map((message) => {
|
||||
if (!message.readed && message.from_public_key != publicKey) {
|
||||
return {
|
||||
...message,
|
||||
readed: 1
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}));
|
||||
});
|
||||
}, [updateDialog]);
|
||||
|
||||
/**
|
||||
* Обработчик сообщений для синхронизации своих же сообщений в группе
|
||||
@@ -337,9 +381,9 @@ export function useSynchronize() {
|
||||
to_public_key: toPublicKey,
|
||||
content: content,
|
||||
timestamp: timestamp,
|
||||
readed: idle ? 0 : 1,
|
||||
readed: 0,
|
||||
chacha_key: groupKey,
|
||||
from_me: fromPublicKey == publicKey ? 1 : 0,
|
||||
from_me: 1,
|
||||
plain_message: decryptedContent,
|
||||
delivered: DeliveredMessageState.DELIVERED,
|
||||
message_id: messageId,
|
||||
@@ -353,10 +397,9 @@ export function useSynchronize() {
|
||||
toPublicKey,
|
||||
content,
|
||||
timestamp,
|
||||
/**если текущий открытый диалог == беседе (которая приходит в toPublicKey) */
|
||||
(currentDialogPublicKeyView == toPublicKey && !idle && viewState != ViewPanelsState.DIALOGS_PANEL_ONLY) ? 1 : 0,
|
||||
'',
|
||||
0,
|
||||
0, //по умолчанию не прочитаны
|
||||
"",
|
||||
1, //Свои же сообщения всегда от нас
|
||||
await encodeWithPassword(privatePlain, decryptedContent),
|
||||
publicKey,
|
||||
messageId,
|
||||
|
||||
Reference in New Issue
Block a user