Финальная версия синхронизации
This commit is contained in:
@@ -1,5 +1,12 @@
|
|||||||
let tail: Promise<void> = Promise.resolve();
|
let tail: Promise<void> = Promise.resolve();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ставит функцию в очередь на выполнение.
|
||||||
|
* Все функции выполняются последовательно, одна за другой.
|
||||||
|
* Если функция выбрасывает ошибку, она логируется,
|
||||||
|
* а выполнение очереди продолжается
|
||||||
|
* @param fn функция
|
||||||
|
*/
|
||||||
export const runTaskInQueue = (fn: () => Promise<void>) => {
|
export const runTaskInQueue = (fn: () => Promise<void>) => {
|
||||||
tail = tail.then(fn).catch((e) => {
|
tail = tail.then(fn).catch((e) => {
|
||||||
console.error("Dialog queue error", e);
|
console.error("Dialog queue error", e);
|
||||||
|
|||||||
@@ -70,10 +70,8 @@ export function useDialogFiber() {
|
|||||||
}
|
}
|
||||||
await runQuery(
|
await runQuery(
|
||||||
"INSERT INTO accounts_sync_times (account, last_sync) VALUES (?, ?) " +
|
"INSERT INTO accounts_sync_times (account, last_sync) VALUES (?, ?) " +
|
||||||
"ON CONFLICT(account) DO UPDATE SET last_sync = CASE " +
|
"ON CONFLICT(account) DO UPDATE SET last_sync = ?",
|
||||||
"WHEN excluded.last_sync > last_sync THEN excluded.last_sync " +
|
[publicKey, timestamp, timestamp]
|
||||||
"ELSE last_sync END",
|
|
||||||
[publicKey, timestamp]
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -580,6 +578,7 @@ export function useDialogFiber() {
|
|||||||
const messageId = packet.getMessageId();
|
const messageId = packet.getMessageId();
|
||||||
await runQuery(`UPDATE messages SET delivered = ?, timestamp = ? WHERE message_id = ? AND account = ?`, [DeliveredMessageState.DELIVERED, Date.now(), messageId, publicKey]);
|
await runQuery(`UPDATE messages SET delivered = ?, timestamp = ? WHERE message_id = ? AND account = ?`, [DeliveredMessageState.DELIVERED, Date.now(), messageId, publicKey]);
|
||||||
updateDialog(packet.getToPublicKey());
|
updateDialog(packet.getToPublicKey());
|
||||||
|
updateSyncTime(Date.now());
|
||||||
log("Delivery packet received msg id " + messageId);
|
log("Delivery packet received msg id " + messageId);
|
||||||
addOrUpdateDialogCache(packet.getToPublicKey(), getDialogCache(packet.getToPublicKey()).map((message) => {
|
addOrUpdateDialogCache(packet.getToPublicKey(), getDialogCache(packet.getToPublicKey()).map((message) => {
|
||||||
if (message.message_id == messageId) {
|
if (message.message_id == messageId) {
|
||||||
|
|||||||
Reference in New Issue
Block a user