From 96155b3ba36a753cd25b173b5107bda25bc032ba Mon Sep 17 00:00:00 2001 From: Kieran Date: Thu, 27 Jul 2023 16:17:08 +0100 Subject: [PATCH] Nostr provider tweaks --- src/element/nostr-provider-dialog.tsx | 26 ++++++++++++++++++++++++-- src/providers/index.ts | 2 ++ src/providers/nip103.ts | 1 + 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/element/nostr-provider-dialog.tsx b/src/element/nostr-provider-dialog.tsx index 3cf9fa7..e65e887 100644 --- a/src/element/nostr-provider-dialog.tsx +++ b/src/element/nostr-provider-dialog.tsx @@ -13,10 +13,14 @@ export function NostrProviderDialog({ provider, ...others }: { provider: StreamP const [info, setInfo] = useState(); const [ep, setEndpoint] = useState(); + function sortEndpoints(arr: Array) { + return arr.sort((a, b) => (a.rate ?? 0) > (b.rate ?? 0) ? -1 : 1); + } + useEffect(() => { provider.info().then(v => { setInfo(v); - setEndpoint(v.endpoints[0]); + setEndpoint(sortEndpoints(v.endpoints)[0]); }); }, [provider]); @@ -51,12 +55,24 @@ export function NostrProviderDialog({ provider, ...others }: { provider: StreamP return `${raw.toFixed(0)} ${ep.unit} @ ${ep.rate} sats/${ep.unit}` } + function parseCapability(cap: string) { + const [tag, ...others] = cap.split(":"); + if (tag === "variant") { + const [height] = others; + return height === "source" ? height : `${height.slice(0, -1)}p`; + } + if (tag === "output") { + return others[0]; + } + return cap; + } + const streamEvent = others.ev ?? info.publishedEvent ?? DummyEvent; return <> {info.endpoints.length > 1 &&

Endpoint

- {info.endpoints.map(a => setEndpoint(a)}> {a.name} )} @@ -91,6 +107,12 @@ export function NostrProviderDialog({ provider, ...others }: { provider: StreamP
About {calcEstimate()}
+
+

Resolutions

+
+ {ep?.capabilities?.map(a => {parseCapability(a)})} +
+
{streamEvent && { provider.updateStreamInfo(ex); others.onFinish?.(ex); diff --git a/src/providers/index.ts b/src/providers/index.ts index 102e9a1..3fd19f1 100644 --- a/src/providers/index.ts +++ b/src/providers/index.ts @@ -55,7 +55,9 @@ export interface StreamProviderEndpoint { key: string rate?: number unit?: string + capabilities?: Array } + export class ProviderStore extends ExternalStore> { #providers: Array = [] diff --git a/src/providers/nip103.ts b/src/providers/nip103.ts index 657618a..a2b07e4 100644 --- a/src/providers/nip103.ts +++ b/src/providers/nip103.ts @@ -37,6 +37,7 @@ export class Nip103StreamProvider implements StreamProvider { key: a.key, rate: a.cost.rate, unit: a.cost.unit, + capabilities: a.capabilities } as StreamProviderEndpoint }) } as StreamProviderInfo