diff --git a/src/modules/main/chat/persistence/message-storage.ts b/src/modules/main/chat/persistence/message-storage.ts index 919c9e3..c45e35c 100644 --- a/src/modules/main/chat/persistence/message-storage.ts +++ b/src/modules/main/chat/persistence/message-storage.ts @@ -17,7 +17,6 @@ export function createMessageObjectStore(db: IDBPDatabase) { export function createMessageStorage(db: IDBPDatabase): MessageStorage { return { async lastMessage({ url, queueId }): Promise { - console.log("TEST", url, queueId); const cursor = await db.transaction("message-v2") .store.index("queueId") .openCursor(IDBKeyRange.only([url, queueId]), "prev"); diff --git a/src/modules/umbrella/logic/logic.ts b/src/modules/umbrella/logic/logic.ts index 4410591..52cd063 100644 --- a/src/modules/umbrella/logic/logic.ts +++ b/src/modules/umbrella/logic/logic.ts @@ -72,11 +72,11 @@ function createSeedClient() { }, }); client.setForeground(true); - window.onfocus = function() { + window.onoffline = function() { console.log(">> foreground(true)"); client.setForeground(true); }; - window.onblur = function() { + window.ononline = function() { console.log("<< foreground(false)"); client.setForeground(false); }; diff --git a/src/modules/umbrella/persistence/seed-persistence.ts b/src/modules/umbrella/persistence/seed-persistence.ts index a40d1a4..289be05 100644 --- a/src/modules/umbrella/persistence/seed-persistence.ts +++ b/src/modules/umbrella/persistence/seed-persistence.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { createMessageObjectStore, createMessageStorage, @@ -76,11 +78,12 @@ export async function createPersistence(): Promise { const messageStore = transaction.objectStore("message"); const messageV2Store = transaction.objectStore("message-v2"); - const cursor = await messageStore.openCursor() ?? []; - for await (const { value } of cursor) { - // eslint-disable-next-line - value.queueId = value.chatId; - await messageV2Store.put(value); + let cursor = await messageStore.openCursor(); + while (cursor) { + const message = cursor.value; + message.queueId = message.chatId; + await messageV2Store.put(message); + cursor = await cursor.continue(); } db.deleteObjectStore("message"); diff --git a/src/sdk-v2/seed-client.ts b/src/sdk-v2/seed-client.ts index c70a826..217e755 100644 --- a/src/sdk-v2/seed-client.ts +++ b/src/sdk-v2/seed-client.ts @@ -99,17 +99,27 @@ export function createSeedClient( const events: Observable = createObservable(); const engine = createSeedEngine(engineOptions.mainUrl); - const subscribeQueueIds: Set = new Set(); - const waitingQueues: Map> = new Map(); + const subscribeQueues: Map> = new Map(); - setInterval(() => { - void engine.executeOrThrow( - engineOptions.mainUrl, - { - "type": "ping", - }, - ); - }, 15_000); + function setSubscribeQueue( + url: string, + queueId: string, + subscribed: boolean, + ) { + const urlQueues = subscribeQueues.get(url) ?? new Set(); + subscribeQueues.set(url, urlQueues); + if (subscribed) { + urlQueues.add(queueId); + } else { + urlQueues.delete(queueId); + } + } + function getSubscribeQueue(url: string, queueId: string) { + const urlQueues = subscribeQueues.get(url); + return urlQueues !== undefined && urlQueues.has(queueId); + } + + const waitingQueues: Map> = new Map(); function setWaitingQueue(url: string, queueId: string, waiting: boolean) { const urlQueues = waitingQueues.get(url) ?? new Set(); @@ -130,6 +140,16 @@ export function createSeedClient( return urlQueues !== undefined && urlQueues.has(queueId); } + setInterval(() => { + ensureServer(engineOptions.mainUrl); + void engine.executeOrThrow( + engineOptions.mainUrl, + { + "type": "ping", + }, + ); + }, 15_000); + engine.events.subscribe(event => { switch (event.type) { case "ready": @@ -188,11 +208,11 @@ export function createSeedClient( } function subscribe(url: string, { queueId, nonce }: SeedClientSubscribeOptions) { - if (subscribeQueueIds.has(url)) { + if (getSubscribeQueue(url, queueId)) { throw new Error(`Already subscribed to this chat id ${queueId}`); } ensureServer(url); - subscribeQueueIds.add(url); + setSubscribeQueue(url, queueId, true); const request: SubscribeRequest = { type: "subscribe", queueId, nonce, diff --git a/src/sdk-v2/seed-engine.ts b/src/sdk-v2/seed-engine.ts index 2428d54..a991235 100644 --- a/src/sdk-v2/seed-engine.ts +++ b/src/sdk-v2/seed-engine.ts @@ -186,9 +186,9 @@ export function createSeedEngine(mainUrl: string): SeedEngine { ) { console.log(`>> execute\nServer: ${url}\nRequest:`, payload); return new Promise((resolve, reject) => { - if (!ready) throw new SeedEngineDisconnected(); + if (!ready) reject(new SeedEngineDisconnected()); if (checkConnection && !connectedUrls.has(url)) { - throw new SeedEngineDisconnected(); + reject(new SeedEngineDisconnected()); } requests.push({