From 1055a6d567d55e0ed0ae95b1b200226f0030e099 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Thu, 17 Oct 2024 09:44:06 -0700 Subject: [PATCH] Fix channel loading --- src/app/components/ChannelMessage.svelte | 6 ++--- src/app/components/ChatMessage.svelte | 2 +- src/app/state.ts | 23 ++++++++----------- src/routes/home/+layout.svelte | 20 ++++++++-------- src/routes/home/[chat]/+page.svelte | 8 +++---- .../spaces/[nrelay]/[[room]]/+page.svelte | 5 +--- 6 files changed, 27 insertions(+), 37 deletions(-) diff --git a/src/app/components/ChannelMessage.svelte b/src/app/components/ChannelMessage.svelte index be886425..38907216 100644 --- a/src/app/components/ChannelMessage.svelte +++ b/src/app/components/ChannelMessage.svelte @@ -83,9 +83,9 @@

{/if} -
+
{#if showPubkey} - + {:else}
{/if} @@ -100,7 +100,7 @@
{#if thunk} -
+
{/if} diff --git a/src/app/components/ChatMessage.svelte b/src/app/components/ChatMessage.svelte index 2e40a17e..3bbd6914 100644 --- a/src/app/components/ChatMessage.svelte +++ b/src/app/components/ChatMessage.svelte @@ -85,7 +85,7 @@ + size={8} /> {/if}
diff --git a/src/app/state.ts b/src/app/state.ts index 2682eae3..7026102e 100644 --- a/src/app/state.ts +++ b/src/app/state.ts @@ -163,18 +163,16 @@ export const pullConservatively = ({relays, filters}: AppSyncOpts) => { const [smart, dumb] = partition(hasNegentropy, relays) const promises = [pull({relays: smart, filters})] - // Since pulling from relays without negentropy is expensive, only do it 30% of the time, - // unless we have very few matching events. If that's the case, either we haven't synced - // this filter yet, or there are few enough events that we don't really need to worry about - // downloading duplicates. Otherwise, add a reasonable since value to make sure we at - // least fetch recent events. - if (Math.random() > 0.7 || repository.query(filters).length < 100) { - promises.push(pull({relays: dumb, filters})) - } else { + // Since pulling from relays without negentropy is expensive, limit how many + // duplicates we repeatedly download + if (dumb.length > 0) { const events = sortBy(e => -e.created_at, repository.query(filters)) - const since = events[50]!.created_at - promises.push(pull({relays: dumb, filters: filters.map(assoc("since", since))})) + if (events.length > 100) { + filters = filters.map(assoc('since', events[100]!.created_at)) + } + + promises.push(pull({relays: dumb, filters})) } return Promise.all(promises) @@ -326,11 +324,8 @@ export const { getKey: channel => channel.id, load: (id: string, request: Partial = {}) => { const [url, room] = splitChannelId(id) - const channel = get(channelsById).get(id) - const timestamps = channel?.messages.map(m => m.event.created_at) || [] - const since = Math.max(0, max(timestamps) - 3600) - return load({...request, relays: [url], filters: [{"#~": [room], since}]}) + return load({...request, relays: [url], filters: [{"#~": [room]}]}) }, }) diff --git a/src/routes/home/+layout.svelte b/src/routes/home/+layout.svelte index 8020bea7..eec99028 100644 --- a/src/routes/home/+layout.svelte +++ b/src/routes/home/+layout.svelte @@ -25,12 +25,10 @@ onMount(() => { const filter = {kinds: [WRAP], "#p": [$pubkey!]} - const sub = subscribe({filters: [{...filter, since: ago(30)}]}) + const relays = ctx.app.router.InboxRelays().getUrls() + const sub = subscribe({filters: [{...filter, since: ago(30)}], relays}) - pullConservatively({ - filters: [filter], - relays: ctx.app.router.InboxRelays().getUrls(), - }) + pullConservatively({filters: [filter], relays}) return () => sub.close() }) @@ -68,11 +66,13 @@ -
- {#each chats as { id, pubkeys, messages } (id)} - - {/each} -
+ {#key $page.params.chat} +
+ {#each chats as { id, pubkeys, messages } (id)} + + {/each} +
+ {/key} diff --git a/src/routes/home/[chat]/+page.svelte b/src/routes/home/[chat]/+page.svelte index 6677ed19..bc91daab 100644 --- a/src/routes/home/[chat]/+page.svelte +++ b/src/routes/home/[chat]/+page.svelte @@ -11,7 +11,7 @@ import {onMount} from "svelte" import {page} from "$app/stores" import {derived} from "svelte/store" - import {sortBy, remove} from "@welshman/lib" + import {ctx, sortBy, now, remove} from "@welshman/lib" import type {TrustedEvent, EventContent} from "@welshman/util" import {createEvent, DIRECT_MESSAGE} from "@welshman/util" import { @@ -91,10 +91,8 @@ elements.reverse() } - onMount(() => { - for (const pk of others) { - loadInboxRelaySelections(pk) - } + onMount(async () => { + await Promise.all(others.map(pk => loadInboxRelaySelections(pk))) }) setTimeout(() => { diff --git a/src/routes/spaces/[nrelay]/[[room]]/+page.svelte b/src/routes/spaces/[nrelay]/[[room]]/+page.svelte index b72aa8d5..e0ee0659 100644 --- a/src/routes/spaces/[nrelay]/[[room]]/+page.svelte +++ b/src/routes/spaces/[nrelay]/[[room]]/+page.svelte @@ -25,7 +25,6 @@ import ChannelMessage from "@app/components/ChannelMessage.svelte" import ChannelCompose from "@app/components/ChannelCompose.svelte" import { - loadChannel, userMembership, decodeNRelay, makeChannelId, @@ -39,8 +38,7 @@ const {nrelay, room = GENERAL} = $page.params const url = decodeNRelay(nrelay) - const id = makeChannelId(url, room) - const channel = deriveChannel(id) + const channel = deriveChannel(makeChannelId(url, room)) const thunks = writable({} as Record) const assertEvent = (e: any) => e as TrustedEvent @@ -84,7 +82,6 @@ } onMount(() => { - loadChannel(id) subscribe({filters: [{'#~': [room], since: now()}], relays: [url]}) })