Синхронизация, фикс ошибок

This commit is contained in:
RoyceDa
2026-02-15 18:15:03 +02:00
parent 8b906169ce
commit 4a505ab974
6 changed files with 73 additions and 17 deletions

View File

@@ -25,6 +25,8 @@ import { useDialogState } from "../DialogStateProvider.tsx/useDialogState";
import { useUserInformation } from "../InformationProvider/useUserInformation";
import { useMentions } from "../DialogStateProvider.tsx/useMentions";
import { runTaskInQueue } from "./dialogQueue";
import { useProtocolState } from "../ProtocolProvider/useProtocolState";
import { ProtocolState } from "../ProtocolProvider/ProtocolProvider";
/**
* При вызове будет запущен "фоновый" обработчик
@@ -50,6 +52,30 @@ export function useDialogFiber() {
const { muted } = useDialogState();
const [userInfo] = useUserInformation(publicKey);
const { pushMention } = useMentions();
const [protocolState] = useProtocolState();
/**
* Обновляет время последней синхронизации для аккаунта
* @param timestamp время
*/
const updateSyncTime = async (timestamp: number) => {
if(protocolState == ProtocolState.SYNCHRONIZATION){
/**
* Если сейчас идет синхронизация то чтобы при синхронизации
* не создавать нагрузку на базу данных
* по постоянному обновлению, обновляем базу один раз - когда
* приходит пакет о том что синхронизация закончилась
*/
return;
}
await runQuery(
"INSERT INTO accounts_sync_times (account, last_sync) VALUES (?, ?) " +
"ON CONFLICT(account) DO UPDATE SET last_sync = CASE " +
"WHEN excluded.last_sync > last_sync THEN excluded.last_sync " +
"ELSE last_sync END",
[publicKey, timestamp]
);
};
/**
* Лог
@@ -177,6 +203,7 @@ export function useDialogFiber() {
*/
return;
}
await updateSyncTime(timestamp);
const groupKey = await getGroupKey(toPublicKey);
if (!groupKey) {
log("Group key not found for group " + toPublicKey);
@@ -343,6 +370,8 @@ export function useDialogFiber() {
return;
}
await updateSyncTime(timestamp);
const chachaDecryptedKey = Buffer.from(await decrypt(chachaKey, privatePlain), "binary");
const key = chachaDecryptedKey.slice(0, 32);
const nonce = chachaDecryptedKey.slice(32);
@@ -494,6 +523,7 @@ export function useDialogFiber() {
*/
return;
}
await updateSyncTime(Date.now());
console.info("PACKED_READ_IM");
await runQuery(`UPDATE messages SET read = 1 WHERE from_public_key = ? AND to_public_key = ? AND account = ?`, [toPublicKey, fromPublicKey, publicKey]);
console.info("read im with params ", [fromPublicKey, toPublicKey, publicKey]);
@@ -527,6 +557,7 @@ export function useDialogFiber() {
const fromPublicKey = packet.getFromPublicKey();
const toPublicKey = packet.getToPublicKey();
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) {