Watch tracker in feed utils

This commit is contained in:
Jon Staab
2026-02-13 15:18:46 -08:00
parent 9188c0a8bc
commit cb06c4e954
+48 -25
View File
@@ -1,5 +1,6 @@
import {get, writable} from "svelte/store" import {get, writable} from "svelte/store"
import { import {
call,
uniq, uniq,
int, int,
YEAR, YEAR,
@@ -80,18 +81,29 @@ export const makeFeed = ({
seen.add(event.id) seen.add(event.id)
} }
const unsubscribe = on(repository, "update", ({added, removed}) => { const unsubscribers = [
if (removed.size > 0) { on(repository, "update", ({added, removed}) => {
buffer.update($buffer => $buffer.filter(e => !removed.has(e.id))) if (removed.size > 0) {
events.update($events => $events.filter(e => !removed.has(e.id))) buffer.update($buffer => $buffer.filter(e => !removed.has(e.id)))
} events.update($events => $events.filter(e => !removed.has(e.id)))
for (const event of added) {
if (matchFilters(filters, event) && tracker.getRelays(event.id).has(url)) {
insertEvent(event)
} }
}
}) for (const event of added) {
if (matchFilters(filters, event) && tracker.getRelays(event.id).has(url)) {
insertEvent(event)
}
}
}),
on(tracker, "add", (id: string, trackerUrl: string) => {
if (trackerUrl === url) {
const event = repository.getEvent(id)
if (event && matchFilters(filters, event)) {
insertEvent(event)
}
}
}),
]
const ctrl = makeFeedController({ const ctrl = makeFeedController({
useWindowing: true, useWindowing: true,
@@ -122,9 +134,9 @@ export const makeFeed = ({
return { return {
events, events,
cleanup: () => { cleanup: () => {
unsubscribe()
scroller.stop() scroller.stop()
controller.abort() controller.abort()
unsubscribers.forEach(call)
}, },
} }
} }
@@ -169,17 +181,28 @@ export const makeCalendarFeed = ({
}) })
} }
const unsubscribe = on(repository, "update", ({added, removed}) => { const unsubscribers = [
if (removed.size > 0) { on(repository, "update", ({added, removed}) => {
events.update($events => $events.filter(e => !removed.has(e.id))) if (removed.size > 0) {
} events.update($events => $events.filter(e => !removed.has(e.id)))
for (const event of added) {
if (matchFilters(filters, event)) {
insertEvent(event)
} }
}
}) for (const event of added) {
if (matchFilters(filters, event)) {
insertEvent(event)
}
}
}),
on(tracker, "add", (id: string, trackerUrl: string) => {
if (trackerUrl === url) {
const event = repository.getEvent(id)
if (event && matchFilters(filters, event)) {
insertEvent(event)
}
}
}),
]
const loadTimeframe = (since: number, until: number) => { const loadTimeframe = (since: number, until: number) => {
const hashes = daysBetween(since, until).map(String) const hashes = daysBetween(since, until).map(String)
@@ -234,10 +257,10 @@ export const makeCalendarFeed = ({
return { return {
events, events,
cleanup: () => { cleanup: () => {
backwardScroller.stop()
forwardScroller.stop()
controller.abort() controller.abort()
unsubscribe() forwardScroller.stop()
backwardScroller.stop()
unsubscribers.forEach(call)
}, },
} }
} }