import { NostrLink, TaggedNostrEvent } from "@snort/system"; import { lazy, Suspense, useState } from "react"; import { FormattedMessage } from "react-intl"; import { Link } from "react-router-dom"; import Icon from "@/Components/Icons/Icon"; import { findTag } from "@/Utils"; import { extractStreamInfo } from "@/Utils/stream"; import NoteAppHandler from "../Event/Note/NoteAppHandler"; import ProfileImage from "../User/ProfileImage"; const LiveKitRoom = lazy(() => import("./livekit")); export function LiveEvent({ ev }: { ev: TaggedNostrEvent }) { const service = ev.tags.find(a => a[0] === "streaming")?.at(1); function inner() { if (service?.endsWith(".m3u8")) { return ; } else if (service?.startsWith("wss+livekit://")) { return ( ); } return ; } return inner(); } function LiveStreamEvent({ ev }: { ev: TaggedNostrEvent }) { const { title, status, starts, host } = extractStreamInfo(ev); const [play, setPlay] = useState(false); function statusLine() { switch (status) { case "live": { return (
); } case "ended": { return ( ); } case "planned": { return ( {new Intl.DateTimeFormat(undefined, { dateStyle: "full", timeStyle: "short" }).format( new Date(Number(starts) * 1000), )} ); } } } function cta() { const link = `https://zap.stream/${NostrLink.fromEvent(ev).encode()}`; switch (status) { case "live": { return ( ); } case "ended": { if (findTag(ev, "recording")) { return ( ); } } } } if (play) { const link = `https://zap.stream/embed/${NostrLink.fromEvent(ev).encode()}`; return (