Improve group loading

This commit is contained in:
Jon Staab 2024-03-06 11:38:58 -08:00
parent 2041ec6a7d
commit cf074bd222
8 changed files with 31 additions and 16 deletions

View File

@ -1,6 +1,6 @@
<script lang="ts"> <script lang="ts">
import {onMount} from "svelte" import {onMount} from "svelte"
import {Tags} from "paravel" import {Tags, decodeAddress} from "paravel"
import {sleep} from "hurdak" import {sleep} from "hurdak"
import {generatePrivateKey} from "src/util/nostr" import {generatePrivateKey} from "src/util/nostr"
import FlexColumn from "src/partials/FlexColumn.svelte" import FlexColumn from "src/partials/FlexColumn.svelte"
@ -12,6 +12,7 @@
env, env,
load, load,
user, user,
hints,
session, session,
loadPubkeys, loadPubkeys,
publishNote, publishNote,
@ -69,11 +70,15 @@
} }
onMount(async () => { onMount(async () => {
// Prime our database with our default follows const {DEFAULT_FOLLOWS, ONBOARDING_LISTS} = $env
loadPubkeys($env.DEFAULT_FOLLOWS) const listOwners = ONBOARDING_LISTS.map(a => decodeAddress(a).pubkey)
// Prime our database with our default follows and list owners
loadPubkeys([...DEFAULT_FOLLOWS, ...listOwners])
// Load our onboarding lists
load({ load({
relays: $env.DEFAULT_RELAYS, relays: hints.FromPubkeys(listOwners).getUrls(),
filters: getIdFilters($env.ONBOARDING_LISTS), filters: getIdFilters($env.ONBOARDING_LISTS),
onEvent: e => { onEvent: e => {
loadPubkeys(Tags.fromEvent(e).values("p").valueOf()) loadPubkeys(Tags.fromEvent(e).values("p").valueOf())
@ -98,18 +103,18 @@
<div <div
class="h-2 w-2 rounded-full" class="h-2 w-2 rounded-full"
class:bg-neutral-200={stage === "intro"} class:bg-neutral-200={stage === "intro"}
class:bg-neutral-600={stage !== "intro"} /> class:bg-neutral-700={stage !== "intro"} />
<div <div
class="h-2 w-2 rounded-full" class="h-2 w-2 rounded-full"
class:bg-neutral-200={stage === "profile"} class:bg-neutral-200={stage === "profile"}
class:bg-neutral-600={stage !== "profile"} /> class:bg-neutral-700={stage !== "profile"} />
<div <div
class="h-2 w-2 rounded-full" class="h-2 w-2 rounded-full"
class:bg-neutral-200={stage === "follows"} class:bg-neutral-200={stage === "follows"}
class:bg-neutral-600={stage !== "follows"} /> class:bg-neutral-700={stage !== "follows"} />
<div <div
class="h-2 w-2 rounded-full" class="h-2 w-2 rounded-full"
class:bg-neutral-200={stage === "note"} class:bg-neutral-200={stage === "note"}
class:bg-neutral-600={stage !== "note"} /> class:bg-neutral-700={stage !== "note"} />
</div> </div>
</FlexColumn> </FlexColumn>

View File

@ -118,7 +118,7 @@
<div class="flex gap-3"> <div class="flex gap-3">
<p <p
class="-ml-1 -mt-2 flex h-12 w-12 items-center justify-center rounded-full bg-neutral-600 text-lg"> class="-ml-1 -mt-2 flex h-12 w-12 items-center justify-center rounded-full bg-neutral-700 text-lg">
3/4 3/4
</p> </p>
<p class="text-2xl font-bold">Find your people</p> <p class="text-2xl font-bold">Find your people</p>

View File

@ -20,7 +20,7 @@
</script> </script>
<div class="flex gap-3"> <div class="flex gap-3">
<p class="-ml-1 -mt-2 flex h-12 w-12 items-center justify-center rounded-full bg-neutral-600 text-lg"> <p class="-ml-1 -mt-2 flex h-12 w-12 items-center justify-center rounded-full bg-neutral-700 text-lg">
1/4 1/4
</p> </p>
<p class="text-2xl font-bold">New to Nostr?</p> <p class="text-2xl font-bold">New to Nostr?</p>

View File

@ -19,7 +19,7 @@
<div class="flex gap-3"> <div class="flex gap-3">
<p <p
class="-ml-1 -mt-2 flex h-12 w-12 items-center justify-center rounded-full bg-neutral-600 text-lg"> class="-ml-1 -mt-2 flex h-12 w-12 items-center justify-center rounded-full bg-neutral-700 text-lg">
4/4 4/4
</p> </p>
<p class="text-2xl font-bold">You're all set!</p> <p class="text-2xl font-bold">You're all set!</p>

View File

@ -34,7 +34,7 @@
</script> </script>
<div class="flex gap-3"> <div class="flex gap-3">
<p class="-ml-1 -mt-2 flex h-12 w-12 items-center justify-center rounded-full bg-neutral-600 text-lg"> <p class="-ml-1 -mt-2 flex h-12 w-12 items-center justify-center rounded-full bg-neutral-700 text-lg">
2/4 2/4
</p> </p>
<p class="text-2xl font-bold">Give us something to go on!</p> <p class="text-2xl font-bold">Give us something to go on!</p>

View File

@ -4,6 +4,7 @@ import {partition} from "ramda"
import {noteKinds, giftWrapKinds, repostKinds} from "src/util/nostr" import {noteKinds, giftWrapKinds, repostKinds} from "src/util/nostr"
import {load} from "src/engine/network/utils" import {load} from "src/engine/network/utils"
import {hints} from "src/engine/relays/utils" import {hints} from "src/engine/relays/utils"
import {env} from "src/engine/session/state"
import {updateCurrentSession} from "src/engine/session/commands" import {updateCurrentSession} from "src/engine/session/commands"
import {groups} from "./state" import {groups} from "./state"
import {deriveUserCircles, getGroupReqInfo, getCommunityReqInfo} from "./utils" import {deriveUserCircles, getGroupReqInfo, getCommunityReqInfo} from "./utils"
@ -40,7 +41,11 @@ export const loadGroups = async (rawAddrs: string[], relays: string[] = []) => {
if (addrs.length > 0) { if (addrs.length > 0) {
load({ load({
relays: hints relays: hints
.merge([hints.scenario([relays]), hints.WithinMultipleContexts(addrs)]) .merge([
hints.scenario([relays]),
hints.WithinMultipleContexts(addrs),
hints.scenario([env.get().PLATFORM_RELAYS]),
])
.getUrls(), .getUrls(),
filters: [{kinds: [34550, 35834], authors, "#d": identifiers}], filters: [{kinds: [34550, 35834], authors, "#d": identifiers}],
}) })

View File

@ -3,7 +3,7 @@ import {ellipsize, seconds} from "hurdak"
import {Tags, decodeAddress, addressToNaddr} from "paravel" import {Tags, decodeAddress, addressToNaddr} from "paravel"
import {fuzzy} from "src/util/misc" import {fuzzy} from "src/util/misc"
import type {GroupStatus, Session} from "src/engine/session/model" import type {GroupStatus, Session} from "src/engine/session/model"
import {pubkey} from "src/engine/session/state" import {env, pubkey} from "src/engine/session/state"
import {session} from "src/engine/session/derived" import {session} from "src/engine/session/derived"
import {hints} from "src/engine/relays/utils" import {hints} from "src/engine/relays/utils"
import {groups, groupSharedKeys, groupAdminKeys} from "./state" import {groups, groupSharedKeys, groupAdminKeys} from "./state"
@ -72,7 +72,9 @@ export const getGroupReqInfo = (address = null) => {
recipients.push(key.pubkey) recipients.push(key.pubkey)
} }
const relays = hints.merge(addresses.map(hints.WithinContext)).getUrls() const relays = hints
.merge([hints.WithinMultipleContexts(addresses), hints.scenario([env.get().PLATFORM_RELAYS])])
.getUrls()
return {admins, recipients, relays, since} return {admins, recipients, relays, since}
} }

View File

@ -1,3 +1,4 @@
import type {Event} from "nostr-tools"
import {without, uniq} from "ramda" import {without, uniq} from "ramda"
import {seconds} from "hurdak" import {seconds} from "hurdak"
import {now} from "paravel" import {now} from "paravel"
@ -11,6 +12,7 @@ export type LoadPeopleOpts = {
relays?: string[] relays?: string[]
kinds?: number[] kinds?: number[]
force?: boolean force?: boolean
onEvent?: (e: Event) => void
} }
export const attemptedPubkeys = new Map() export const attemptedPubkeys = new Map()
@ -48,7 +50,7 @@ export const getStalePubkeys = (pubkeys: Iterable<string>) => {
export const loadPubkeys = async ( export const loadPubkeys = async (
rawPubkeys: Iterable<string>, rawPubkeys: Iterable<string>,
{relays, force, kinds = personKinds}: LoadPeopleOpts = {}, {relays, force, onEvent, kinds = personKinds}: LoadPeopleOpts = {},
) => { ) => {
const pubkeys = force ? uniq(Array.from(rawPubkeys)) : getStalePubkeys(rawPubkeys) const pubkeys = force ? uniq(Array.from(rawPubkeys)) : getStalePubkeys(rawPubkeys)
@ -68,6 +70,7 @@ export const loadPubkeys = async (
return load({ return load({
filters, filters,
onEvent,
relays: hints.merge([hints.scenario([relays]), hints.FromPubkeys(pubkeys)]).getUrls(), relays: hints.merge([hints.scenario([relays]), hints.FromPubkeys(pubkeys)]).getUrls(),
}) })
} }