diff --git a/src/app/prefetch/pages/index.page.tsx b/src/app/prefetch/pages/index.page.tsx index d205a98f..69a9d1d0 100644 --- a/src/app/prefetch/pages/index.page.tsx +++ b/src/app/prefetch/pages/index.page.tsx @@ -1,5 +1,5 @@ import { prefetchEvents } from "@libs/ndk"; -import { countTotalNotes, createNote } from "@libs/storage"; +import { countTotalNotes, createChat, createNote } from "@libs/storage"; import { NDKFilter } from "@nostr-dev-kit/ndk"; import { LumeIcon } from "@shared/icons"; import { RelayContext } from "@shared/relayProvider"; @@ -62,11 +62,50 @@ export function Page() { } } + async function fetchChats() { + try { + const sendFilter: NDKFilter = { + kinds: [4], + authors: [account.pubkey], + since: lastLogin, + }; + const receiveFilter: NDKFilter = { + kinds: [4], + "#p": [account.pubkey], + since: lastLogin, + }; + + const sendMessages = await prefetchEvents(ndk, sendFilter); + const receiveMessages = await prefetchEvents(ndk, receiveFilter); + const events = [...sendMessages, ...receiveMessages]; + + events.forEach((event) => { + const receiverPubkey = + event.tags.find((t) => t[0] === "p")[1] || account.pubkey; + createChat( + event.id, + receiverPubkey, + event.pubkey, + event.content, + event.tags, + event.created_at, + ); + }); + + return true; + } catch (e) { + console.log("error: ", e); + } + } + useEffect(() => { async function prefetch() { const notes = await fetchNotes(); if (notes) { - navigate("/app/space", { overwriteLastHistoryEntry: true }); + const chats = await fetchChats(); + if (chats) { + navigate("/app/space", { overwriteLastHistoryEntry: true }); + } } } prefetch(); diff --git a/src/libs/ndk.tsx b/src/libs/ndk.tsx index f4457b0d..4e7304a0 100644 --- a/src/libs/ndk.tsx +++ b/src/libs/ndk.tsx @@ -2,8 +2,6 @@ import NDK, { NDKConstructorParams, NDKEvent, NDKFilter, - NDKFilterOptions, - NDKRelaySet, } from "@nostr-dev-kit/ndk"; import { FULL_RELAYS } from "@stores/constants"; @@ -37,7 +35,7 @@ export async function prefetchEvents( }); relaySetSubscription.on("eose", () => { - setTimeout(() => resolve(new Set(events.values())), 2000); + setTimeout(() => resolve(new Set(events.values())), 3000); }); }); }