Add follows feed, limit how many relays we publish replies to.

This commit is contained in:
Jonathan Staab 2023-02-20 09:08:37 -06:00
parent 8fd75bf26a
commit 927d04b74e
8 changed files with 29 additions and 13 deletions

View File

@ -107,15 +107,16 @@ export const getRelayForEventHint = event =>
export const getRelayForPersonHint = (pubkey, event) => export const getRelayForPersonHint = (pubkey, event) =>
first(getPubkeyWriteRelays(pubkey)) || getRelayForEventHint(event) first(getPubkeyWriteRelays(pubkey)) || getRelayForEventHint(event)
// If we're replying or reacting to an event, we want the author to know, // If we're replying or reacting to an event, we want the author to know, as well as
// as well as anyone else who is tagged in the original event or the reply. // anyone else who is tagged in the original event or the reply. Get everyone's read
// Get everyone's read relays. We also want to advertise our content to // relays. Limit how many per pubkey we publish to though. We also want to advertise
// our followers, so write to our write relays as well. // our content to our followers, so write to our write relays as well.
export const getEventPublishRelays = event => { export const getEventPublishRelays = event => {
const tags = Tags.from(event) const tags = Tags.from(event)
const pubkeys = tags.type("p").values().all().concat(event.pubkey) const pubkeys = tags.type("p").values().all().concat(event.pubkey)
const relayChunks = pubkeys.map(pubkey => getPubkeyReadRelays(pubkey).slice(0, 3))
return getAllPubkeyReadRelays(pubkeys).concat(getUserWriteRelays()) return aggregateScores(relayChunks).concat(getUserWriteRelays())
} }

View File

@ -37,7 +37,7 @@ export const login = ({privkey, pubkey}: {privkey?: string, pubkey?: string}) =>
export const signup = privkey => { export const signup = privkey => {
keys.setPrivateKey(privkey) keys.setPrivateKey(privkey)
navigate('/notes/network') navigate('/notes/follows')
} }
export const renderNote = (note, {showEntire = false}) => { export const renderNote = (note, {showEntire = false}) => {

View File

@ -40,7 +40,7 @@
</a> </a>
</li> </li>
<li class="cursor-pointer"> <li class="cursor-pointer">
<a class="block px-4 py-2 hover:bg-accent transition-all" href="/notes/network"> <a class="block px-4 py-2 hover:bg-accent transition-all" href="/notes/follows">
<i class="fa-solid fa-tag mr-2" /> Notes <i class="fa-solid fa-tag mr-2" /> Notes
</a> </a>
</li> </li>

View File

@ -7,7 +7,7 @@
export let setActiveTab export let setActiveTab
</script> </script>
<div class="border-b border-solid border-dark flex pt-2" in:fly={{y: 20}}> <div class="border-b border-solid border-dark flex pt-2 overflow-auto" in:fly={{y: 20}}>
{#each tabs as tab} {#each tabs as tab}
<button <button
class="cursor-pointer hover:border-b border-solid border-medium px-8 py-4" class="cursor-pointer hover:border-b border-solid border-medium px-8 py-4"

View File

@ -3,5 +3,5 @@
import {navigate} from 'svelte-routing' import {navigate} from 'svelte-routing'
import user from 'src/agent/user' import user from 'src/agent/user'
onMount(() => navigate(user.getProfile() ? '/notes/network' : '/login')) onMount(() => navigate(user.getProfile() ? '/notes/follows' : '/login'))
</script> </script>

View File

@ -4,6 +4,7 @@
import Content from "src/partials/Content.svelte" import Content from "src/partials/Content.svelte"
import NewNoteButton from "src/partials/NewNoteButton.svelte" import NewNoteButton from "src/partials/NewNoteButton.svelte"
import Tabs from "src/partials/Tabs.svelte" import Tabs from "src/partials/Tabs.svelte"
import Follows from "src/views/notes/Follows.svelte"
import Network from "src/views/notes/Network.svelte" import Network from "src/views/notes/Network.svelte"
import Popular from "src/views/notes/Popular.svelte" import Popular from "src/views/notes/Popular.svelte"
import user from 'src/agent/user' import user from 'src/agent/user'
@ -21,8 +22,10 @@
</Content> </Content>
{/if} {/if}
<div> <div>
<Tabs tabs={['network', 'popular']} {activeTab} {setActiveTab} /> <Tabs tabs={['follows', 'network', 'popular']} {activeTab} {setActiveTab} />
{#if activeTab === 'network'} {#if activeTab === 'follows'}
<Follows />
{:else if activeTab === 'network'}
<Network /> <Network />
{:else} {:else}
<Popular /> <Popular />

View File

@ -47,7 +47,7 @@
sleep(3000), sleep(3000),
]) ])
navigate('/notes/network') navigate('/notes/follows')
} else { } else {
await sleep(1000) await sleep(1000)
@ -57,7 +57,7 @@
} }
const skip = () => { const skip = () => {
navigate('/notes/network') navigate('/notes/follows')
} }
searchSample() searchSample()

View File

@ -0,0 +1,12 @@
<script>
import {shuffle} from 'src/util/misc'
import Notes from "src/partials/Notes.svelte"
import {getUserFollows} from 'src/agent/social'
import {getAllPubkeyWriteRelays} from 'src/agent/relays'
const authors = shuffle(getUserFollows()).slice(0, 256)
const relays = getAllPubkeyWriteRelays(authors)
const filter = {kinds: [1, 7], authors}
</script>
<Notes {relays} {filter} />