import { useEffect, useState } from "react"; import { EventPublisher } from "@snort/system"; import { unixNow } from "@snort/shared"; import "./new-stream.css"; import AsyncButton from "./async-button"; import { System } from "index"; export function NewStream() { const [title, setTitle] = useState(""); const [summary, setSummary] = useState(""); const [image, setImage] = useState(""); const [stream, setStream] = useState(""); const [isValid, setIsValid] = useState(false); function validate() { if (title.length < 2) { return false; } if (stream.length < 5 || !stream.match(/^https?:\/\/.*\.m3u8?$/i)) { return false; } if (image.length > 0 && !image.match(/^https?:\/\//i)) { return false; } return true; } useEffect(() => { setIsValid(validate()); }, [title, summary, image, stream]); async function publishStream() { const pub = await EventPublisher.nip7(); if (pub) { const ev = await pub.generic(eb => { const now = unixNow(); return eb.kind(30_311) .tag(["d", now.toString()]) .tag(["title", title]) .tag(["summary", summary]) .tag(["image", image]) .tag(["streaming", stream]) .tag(["status", "live"]) }); console.debug(ev); System.BroadcastEvent(ev); } } return
Title
Summary
Cover image
Stream Url