diff --git a/src/helpers/nostr/stream.ts b/src/helpers/nostr/stream.ts index 85881061d..a0754c451 100644 --- a/src/helpers/nostr/stream.ts +++ b/src/helpers/nostr/stream.ts @@ -35,12 +35,14 @@ export function parseStreamEvent(stream: NostrEvent): ParsedStream { const summary = stream.tags.find((t) => t[0] === "summary")?.[1]; const image = stream.tags.find((t) => t[0] === "image")?.[1]; const starts = stream.tags.find((t) => t[0] === "starts")?.[1]; - const endsTag = stream.tags.find((t) => t[0] === "ends")?.[1]; + const ends = stream.tags.find((t) => t[0] === "ends")?.[1]; const streaming = stream.tags.find((t) => t[0] === "streaming")?.[1]; const recording = stream.tags.find((t) => t[0] === "recording")?.[1]; const goal = stream.tags.find((t) => t[0] === "goal")?.[1]; const identifier = stream.tags.find((t) => t[0] === "d")?.[1]; + if (!identifier) throw new Error("missing identifier"); + let relays = stream.tags.find((t) => t[0] === "relays"); // remove the first "relays" element if (relays) { @@ -49,11 +51,10 @@ export function parseStreamEvent(stream: NostrEvent): ParsedStream { } const startTime = starts ? parseInt(starts) : undefined; - const endTime = endsTag ? parseInt(endsTag) : undefined; - - if (!identifier) throw new Error("missing identifier"); + let endTime = ends ? parseInt(ends) : undefined; let status = stream.tags.find((t) => t[0] === "status")?.[1] || "ended"; + if (status === "ended" && endTime === undefined) endTime = stream.created_at; if (endTime && endTime > dayjs().unix()) { status = "ended"; } diff --git a/src/views/streams/stream/stream-chat/use-stream-chat-timeline.ts b/src/views/streams/stream/stream-chat/use-stream-chat-timeline.ts index c7d260c77..1cc36933b 100644 --- a/src/views/streams/stream/stream-chat/use-stream-chat-timeline.ts +++ b/src/views/streams/stream/stream-chat/use-stream-chat-timeline.ts @@ -18,7 +18,11 @@ export default function useStreamChatTimeline(stream: ParsedStream) { const muteFilter = useClientSideMuteFilter(); const eventFilter = useCallback( - (event: NostrEvent) => !(hostMuteFilter(event) || muteFilter(event)), + (event: NostrEvent) => { + if (stream.starts && event.created_at < stream.starts) return false; + if (stream.ends && event.created_at > stream.ends) return false; + return !(hostMuteFilter(event) || muteFilter(event)); + }, [hostMuteFilter, muteFilter], ); @@ -38,5 +42,6 @@ export default function useStreamChatTimeline(stream: ParsedStream) { } return streamQuery; }, [stream, goal]); + return useTimelineLoader(`${getEventUID(stream.event)}-chat`, streamRelays, query, { eventFilter }); }