Improve feed quality by separating kind 1 and 7 filters

This commit is contained in:
Jonathan Staab 2023-03-03 10:11:09 -06:00
parent 6b2954c48c
commit 447fdab654
7 changed files with 24 additions and 12 deletions

View File

@ -1,5 +1,10 @@
# Changelog
## 0.2.16
- [x] Add search by nip05
- [x] Fix feed to show more variety
## 0.2.15
- [x] Add zaps

View File

@ -1,8 +1,6 @@
# Current
- [ ] Search by nip05 alias
- nevent1qqsdt4ux9c0zvd6hzpwnzznjsmd7a337mpxdspu9wd4fq8drvqejdmqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqs6amnwvaz7tmwdaejumr0dsffemjp
- [ ] Fix feeds
- [ ] Show image upload rather than plop url in
- [ ] Hash pubkey so we can track usage by unique user
- [ ] Try adding boxes/separation on feeds based on user feedback
- [ ] Strip zero width spaces from compose

View File

@ -150,7 +150,7 @@ export const getLastSync = (k, fallback = 0) => {
export class Cursor {
until: number
limit: number
constructor(limit = 10) {
constructor(limit = 50) {
this.until = now()
this.limit = limit
}
@ -170,7 +170,7 @@ export class Cursor {
if (events.length > 1) {
const timestamps = sortBy(identity, pluck('created_at', events))
const gaps = aperture(2, timestamps).map(([a, b]) => b - a)
const gap = quantile(gaps, 0.5)
const gap = quantile(gaps, 0.1)
this.until -= Math.round(gap * events.length)
}

View File

@ -1,5 +1,5 @@
import type {DisplayEvent} from 'src/util/types'
import {fromPairs, last, identity, objOf, prop, flatten, uniq} from 'ramda'
import {is, fromPairs, mergeLeft, last, identity, objOf, prop, flatten, uniq} from 'ramda'
import {nip19} from 'nostr-tools'
import {ensurePlural, ellipsize, first} from 'hurdak/lib/hurdak'
@ -80,7 +80,7 @@ export const displayPerson = p => {
}
}
export const isLike = content => ['', '+', '🤙', '👍', '❤️'].includes(content)
export const isLike = content => ['', '+', '🤙', '👍', '❤️', '😎', '🏅'].includes(content)
export const isAlert = (e, pubkey) => {
if (![1, 7, 9735].includes(e.kind)) {
@ -130,3 +130,6 @@ export const toHex = (data: string): string | null => {
return null
}
}
export const mergeFilter = (filter, extra) =>
is(Array, filter) ? filter.map(mergeLeft(extra)) : {...filter, ...extra}

View File

@ -4,7 +4,7 @@
import {slide} from 'svelte/transition'
import {quantify} from 'hurdak/lib/hurdak'
import {createScroller, now, Cursor} from 'src/util/misc'
import {asDisplayEvent} from 'src/util/nostr'
import {asDisplayEvent, mergeFilter} from 'src/util/nostr'
import Spinner from 'src/partials/Spinner.svelte'
import Content from 'src/partials/Content.svelte'
import Note from "src/views/notes/Note.svelte"
@ -78,14 +78,14 @@
}
onMount(() => {
const sub = network.listen({relays, filter: {...filter, since}, onChunk})
const sub = network.listen({relays, filter: mergeFilter(filter, {since}), onChunk})
const scroller = createScroller(() => {
if ($modal) {
return
}
return network.load({relays, filter: {...filter, ...cursor.getFilter()}, onChunk})
return network.load({relays, filter: mergeFilter(filter, cursor.getFilter()), onChunk})
})
return () => {

View File

@ -6,7 +6,10 @@
const authors = shuffle(getUserFollows()).slice(0, 256)
const relays = sampleRelays(getAllPubkeyWriteRelays(authors))
const filter = {kinds: [1, 7], authors}
// Separate notes and reactions into two queries since otherwise reactions dominate,
// we never find their parents (or reactions are mostly to a few posts), and the feed sucks
const filter = [{kinds: [1], authors}, {kinds: [7], authors}]
</script>
<Notes {relays} {filter} />

View File

@ -8,7 +8,10 @@
// sending too many pubkeys. This will also result in some variety.
const authors = shuffle(getUserNetwork()).slice(0, 256)
const relays = sampleRelays(getAllPubkeyWriteRelays(authors))
const filter = {kinds: [1, 7], authors}
// Separate notes and reactions into two queries since otherwise reactions dominate,
// we never find their parents (or reactions are mostly to a few posts), and the feed sucks
const filter = [{kinds: [1], authors}, {kinds: [7], authors}]
</script>
<Notes {relays} {filter} />