Синхронизация, фикс ошибок
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user