Fix recent missing events in feeds

This commit is contained in:
Jon Staab
2025-12-04 15:56:05 -08:00
parent ee444416e4
commit 4132e8449b
3 changed files with 13 additions and 11 deletions

View File

@@ -5,6 +5,7 @@
* Fix skinny profile images * Fix skinny profile images
* Custom handler for relay urls * Custom handler for relay urls
* Improve time based chat partitioning * Improve time based chat partitioning
* Improve authenticated image access interop
# 1.6.0 # 1.6.0

View File

@@ -4,7 +4,6 @@ import {
int, int,
YEAR, YEAR,
DAY, DAY,
assoc,
insertAt, insertAt,
sortBy, sortBy,
now, now,
@@ -33,7 +32,7 @@ import {load, request} from "@welshman/net"
import {repository, makeFeedController, loadRelay, tracker} from "@welshman/app" import {repository, makeFeedController, loadRelay, tracker} from "@welshman/app"
import {createScroller} from "@lib/html" import {createScroller} from "@lib/html"
import {daysBetween} from "@lib/util" import {daysBetween} from "@lib/util"
import {NOTIFIER_RELAY} from "@app/core/state" import {NOTIFIER_RELAY, getEventsForUrl} from "@app/core/state"
// Utils // Utils
@@ -48,12 +47,9 @@ export const makeFeed = ({
element: HTMLElement element: HTMLElement
onExhausted?: () => void onExhausted?: () => void
}) => { }) => {
const initialIds = Array.from(tracker.getIds(url)) const seen = new Set<string>()
const initialFilters = filters.map(assoc("ids", initialIds))
const initialEvents = repository.query(initialFilters)
const seen = new Set(initialEvents.map(e => e.id))
const controller = new AbortController() const controller = new AbortController()
const buffer = writable(initialEvents) const buffer = writable<TrustedEvent[]>([])
const events = writable<TrustedEvent[]>([]) const events = writable<TrustedEvent[]>([])
const insertEvent = (event: TrustedEvent) => { const insertEvent = (event: TrustedEvent) => {
@@ -124,6 +120,10 @@ export const makeFeed = ({
}, },
}) })
for (const event of getEventsForUrl(url, filters)) {
insertEvent(event)
}
return { return {
events, events,
cleanup: () => { cleanup: () => {
@@ -147,9 +147,6 @@ export const makeCalendarFeed = ({
}) => { }) => {
const interval = int(5, DAY) const interval = int(5, DAY)
const controller = new AbortController() const controller = new AbortController()
const initialIds = Array.from(tracker.getIds(url))
const initialFilters = filters.map(assoc("ids", initialIds))
const initialEvents = repository.query(initialFilters)
let exhaustedScrollers = 0 let exhaustedScrollers = 0
let backwardWindow = [now() - interval, now()] let backwardWindow = [now() - interval, now()]
@@ -159,7 +156,7 @@ export const makeCalendarFeed = ({
const getEnd = (event: TrustedEvent) => parseInt(getTagValue("end", event.tags) || "") const getEnd = (event: TrustedEvent) => parseInt(getTagValue("end", event.tags) || "")
const events = writable(sortBy(getStart, initialEvents)) const events = writable(sortBy(getStart, getEventsForUrl(url, filters)))
const insertEvent = (event: TrustedEvent) => { const insertEvent = (event: TrustedEvent) => {
const start = getStart(event) const start = getStart(event)

View File

@@ -48,6 +48,7 @@ import {
deriveItemsByKey, deriveItemsByKey,
deriveEventsByIdByUrl, deriveEventsByIdByUrl,
deriveEventsByIdForUrl, deriveEventsByIdForUrl,
getEventsByIdForUrl,
} from "@welshman/store" } from "@welshman/store"
import {isKindFeed, findFeed} from "@welshman/feeds" import {isKindFeed, findFeed} from "@welshman/feeds"
import { import {
@@ -216,6 +217,9 @@ export const deriveEvent = makeDeriveEvent({
onDerive: (filters: Filter[], relays: string[]) => load({filters, relays}), onDerive: (filters: Filter[], relays: string[]) => load({filters, relays}),
}) })
export const getEventsForUrl = (url: string, filters: Filter[]) =>
getEventsByIdForUrl({url, tracker, repository, filters}).values()
export const deriveEventsForUrl = (url: string, filters: Filter[]) => export const deriveEventsForUrl = (url: string, filters: Filter[]) =>
deriveArray(deriveEventsByIdForUrl({url, tracker, repository, filters})) deriveArray(deriveEventsByIdForUrl({url, tracker, repository, filters}))