From f9f0cf213d0dfd899c246e573c57779397099216 Mon Sep 17 00:00:00 2001 From: kieran Date: Wed, 13 Nov 2024 14:37:38 +0000 Subject: [PATCH] fix: planned stream dashboard --- src/element/stream-editor/index.tsx | 14 ++++------ src/pages/dashboard/dashboard.tsx | 43 ++++++++++++++++++++--------- src/providers/zsz.ts | 3 +- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/src/element/stream-editor/index.tsx b/src/element/stream-editor/index.tsx index a8fb75c..b5af47b 100644 --- a/src/element/stream-editor/index.tsx +++ b/src/element/stream-editor/index.tsx @@ -145,13 +145,7 @@ export function StreamEditor({ ev, onFinish, options }: StreamEditorProps) { } } - function toDateTimeString(n: number) { - return new Date(n * 1000).toISOString().substring(0, -1); - } - - function fromDateTimeString(s: string) { - return Math.floor(new Date(s).getTime() / 1000); - } + const startsDate = new Date(parseInt(start ?? "0") * 1000); return ( <> @@ -209,8 +203,10 @@ export function StreamEditor({ ev, onFinish, options }: StreamEditorProps) { }> setStart(fromDateTimeString(e.target.value).toString())} + value={`${startsDate.getFullYear().toString().padStart(4, "0")}-${startsDate.getMonth().toString().padStart(2, "0")}-${startsDate.getDate().toString().padStart(2, "0")}T${startsDate.getHours().toString().padStart(2, "0")}:${startsDate.getMinutes().toString().padStart(2, "0")}`} + onChange={e => { + setStart((e.target.valueAsNumber / 1000).toString()); + }} /> )} diff --git a/src/pages/dashboard/dashboard.tsx b/src/pages/dashboard/dashboard.tsx index c7a7631..5b87688 100644 --- a/src/pages/dashboard/dashboard.tsx +++ b/src/pages/dashboard/dashboard.tsx @@ -49,7 +49,7 @@ export function DashboardForLink({ link }: { link: NostrLink }) { const provider = useMemo(() => (service ? new NostrStreamProvider("", service) : DefaultProvider), [service]); const defaultEndpoint = useMemo(() => { - return info?.endpoints.find(a => a.name == (recording ? "Best" : "Good")) ?? info?.endpoints[0]; + return info?.endpoints?.find(a => a.name == (recording ? "Best" : "Good")) ?? info?.endpoints?.at(0); }, [info, recording]); useEffect(() => { @@ -84,28 +84,44 @@ export function DashboardForLink({ link }: { link: NostrLink }) { if (!streamLink && !location.search.includes("setupComplete=true")) return ; + function headingText() { + switch (status) { + case StreamState.Live: + return ; + case StreamState.Ended: + return ; + case StreamState.Planned: + return ; + } + } + + function headingDotStyle() { + switch (status) { + case StreamState.Live: + return "animate-pulse bg-green-500"; + case StreamState.Ended: + return "bg-red-500"; + case StreamState.Planned: + return "bg-yellow-500"; + } + } + return (

- +

-
- {status === StreamState.Live ? ( - - ) : ( - - )} +
+ {headingText()}
{streamLink && status === StreamState.Live && !isMyManual && ( @@ -152,7 +168,7 @@ export function DashboardForLink({ link }: { link: NostrLink }) {
)} - {streamLink && isMyManual && status === StreamState.Live && ( + {streamLink && isMyManual && (status === StreamState.Live || status === StreamState.Planned) && ( <>
@@ -223,7 +239,7 @@ export function DashboardForLink({ link }: { link: NostrLink }) {
)} - {(!streamLink || status === StreamState.Ended) && ( + {(!streamLink || status !== StreamState.Live) && (

@@ -266,6 +282,7 @@ export function DashboardForLink({ link }: { link: NostrLink }) { )} + {streamLink && status === StreamState.Planned && }

); } diff --git a/src/providers/zsz.ts b/src/providers/zsz.ts index 606cca3..a4b37df 100644 --- a/src/providers/zsz.ts +++ b/src/providers/zsz.ts @@ -1,10 +1,9 @@ import { base64 } from "@scure/base"; -import { StreamProvider, StreamProviderEndpoint, StreamProviderInfo, StreamProviders } from "."; +import { StreamProvider, StreamProviderEndpoint, StreamProviders } from "."; import { EventKind, EventPublisher, NostrEvent, SystemInterface } from "@snort/system"; import { Login } from "@/login"; import { getPublisher } from "@/login"; import { extractStreamInfo } from "@/utils"; -import { StreamState } from "@/const"; import { appendDedupe, unixNow } from "@snort/shared"; import { TimeSync } from "@/time-sync";