From a9155a78b0cff810c8d5e9652ae2bb2906a84416 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Mon, 8 Jan 2024 09:10:32 -0300 Subject: [PATCH] rework client lists backend code. --- clients.go | 159 +++++++++++++++++++++------------------ clients.templ | 4 +- file_metadata.templ | 2 +- live_event.templ | 2 +- live_event_message.templ | 2 +- note.templ | 2 +- profile.templ | 2 +- relay.templ | 2 +- 8 files changed, 94 insertions(+), 81 deletions(-) diff --git a/clients.go b/clients.go index 53b966b..4f642a7 100644 --- a/clients.go +++ b/clients.go @@ -1,93 +1,106 @@ package main import ( + "strings" + + "github.com/a-h/templ" "github.com/nbd-wtf/go-nostr" ) type ClientReference struct { ID string Name string - URL string + Base string Platform string } +func (c ClientReference) URL(code string) templ.SafeURL { + return templ.SafeURL(strings.Replace(c.Base, "{code}", code, -1)) +} + +var ( + native = ClientReference{ID: "native", Name: "Your default app", Base: "nostr:{code}", Platform: "native"} + + nosta = ClientReference{ID: "nosta", Name: "Nosta", Base: "https://nosta.me/{code}", Platform: "web"} + snort = ClientReference{ID: "snort", Name: "Snort", Base: "https://snort.social/p/{code}", Platform: "web"} + satellite = ClientReference{ID: "satellite", Name: "Satellite", Base: "https://satellite.earth/@{code}", Platform: "web"} + primalWeb = ClientReference{ID: "primal", Name: "Primal", Base: "https://primal.net/p/{code}", Platform: "web"} + nostrudel = ClientReference{ID: "nostrudel", Name: "Nostrudel", Base: "https://nostrudel.ninja/#/u/{code}", Platform: "web"} + nostter = ClientReference{ID: "nostter", Name: "Nostter", Base: "https://nostter.app/{code}", Platform: "web"} + iris = ClientReference{ID: "iris", Name: "Iris", Base: "https://iris.to/{code}", Platform: "web"} + coracle = ClientReference{ID: "coracle", Name: "Coracle", Base: "https://coracle.social/{code}", Platform: "web"} + + zapStream = ClientReference{ID: "zap.stream", Name: "zap.stream", Base: "https://zap.stream/{code}", Platform: "web"} + nostrrr = ClientReference{ID: "nostrrr", Name: "Nostrrr", Base: "https://nostrrr.com/relay/{code}", Platform: "web"} + + yakihonne = ClientReference{ID: "yakihonne", Name: "YakiHonne", Base: "https://yakihonne.com/article/{code}", Platform: "web"} + habla = ClientReference{ID: "habla", Name: "Habla", Base: "https://habla.news/a/{code}", Platform: "web"} + highlighter = ClientReference{ID: "highlighter", Name: "Highlighter", Base: "https://highlighter.com/a/{code}", Platform: "web"} + blogstack = ClientReference{ID: "blogstack", Name: "Blogstack", Base: "https://blogstack.io/{code}", Platform: "web"} + + yanaAndroid = ClientReference{ID: "yana", Name: "Yana", Base: "intent:{code}#Intent;scheme=nostr;package=yana.nostr;end`;", Platform: "android"} + springAndroid = ClientReference{ID: "spring", Name: "Spring", Base: "intent:{code}#Intent;scheme=nostr;package=com.nostr.universe;end`;", Platform: "android"} + amethyst = ClientReference{ID: "amethyst", Name: "Amethyst", Base: "intent:{code}#Intent;scheme=nostr;package=com.vitorpamplona.amethyst;end`;", Platform: "android"} + freeFromAndroid = ClientReference{ID: "freefrom", Name: "FreeFrom", Base: "intent:{code}#Intent;scheme=nostr;package=com.freefrom;end`;", Platform: "android"} + currentAndroid = ClientReference{ID: "current", Name: "Current", Base: "intent:{code}#Intent;scheme=nostr;package=io.getcurrent.current;end`;", Platform: "android"} + plebstrAndroid = ClientReference{ID: "plebstr", Name: "Plebstr", Base: "intent:{code}#Intent;scheme=nostr;package=com.plebstr.client;end`;", Platform: "android"} + + nos = ClientReference{ID: "nos", Name: "Nos", Base: "nos:{code}", Platform: "ios"} + damus = ClientReference{ID: "damus", Name: "Damus", Base: "damus:{code}", Platform: "ios"} + nostur = ClientReference{ID: "nostur", Name: "Nostur", Base: "nostur:{code}", Platform: "ios"} + primalIOS = ClientReference{ID: "primal", Name: "Primal", Base: "primal:{code}", Platform: "ios"} + freeFromIOS = ClientReference{ID: "freefrom", Name: "FreeFrom", Base: "freefrom:{code}", Platform: "ios"} + plebstrIOS = ClientReference{ID: "plebstr", Name: "Plebstr", Base: "plebstr:{code}", Platform: "ios"} +) + func generateClientList(code string, event *nostr.Event) []ClientReference { - clients := []ClientReference{ - {ID: "native", Name: "Your default app", URL: "nostr:" + code, Platform: "native"}, + switch event.Kind { + case 1, 6: + return []ClientReference{ + native, + coracle, snort, nostter, nostrudel, primalWeb, satellite, iris, + nos, damus, nostur, primalIOS, freeFromIOS, plebstrIOS, + yanaAndroid, springAndroid, amethyst, currentAndroid, plebstrAndroid, freeFromAndroid, + } + case 0: + return []ClientReference{ + native, + nosta, coracle, snort, nostter, nostrudel, primalWeb, satellite, iris, + nos, damus, nostur, primalIOS, freeFromIOS, plebstrIOS, + yanaAndroid, springAndroid, amethyst, currentAndroid, plebstrAndroid, freeFromAndroid, + } + case 30023, 30024: + return []ClientReference{ + native, + yakihonne, habla, highlighter, blogstack, + damus, nos, nostur, + amethyst, springAndroid, + } + case 1063: + return []ClientReference{ + native, + snort, coracle, + amethyst, + } + case 30311: + return []ClientReference{ + native, + zapStream, nostrudel, + amethyst, + } + default: + return []ClientReference{ + native, + coracle, snort, nostter, nostrudel, primalWeb, satellite, iris, + nos, damus, nostur, primalIOS, freeFromIOS, plebstrIOS, + yanaAndroid, springAndroid, amethyst, currentAndroid, plebstrAndroid, freeFromAndroid, + } } - - webClients_1_6 := []ClientReference{ - {ID: "snort", Name: "Snort", URL: "https://Snort.social/e/" + code, Platform: "web"}, - {ID: "nostrudel", Name: "Nostrudel", URL: "https://nostrudel.ninja/#/n/" + code, Platform: "web"}, - {ID: "satellite", Name: "Satellite", URL: "https://satellite.earth/thread/" + event.ID, Platform: "web"}, - {ID: "coracle", Name: "Coracle", URL: "https://coracle.social/" + code, Platform: "web"}, - {ID: "primal", Name: "Primal", URL: "https://primal.net/thread/" + event.ID, Platform: "web"}, - {ID: "nostter", Name: "Nostter", URL: "https://nostter.app/" + code, Platform: "web"}, - {ID: "highlighter", Name: "Highlighter", URL: "https://highlighter.com/a/" + code, Platform: "web"}, - {ID: "iris", Name: "Iris", URL: "https://iris.to/" + code, Platform: "web"}, - } - - webClients_0 := []ClientReference{ - {ID: "nosta", Name: "Nosta", URL: "https://nosta.me/" + code, Platform: "web"}, - {ID: "snort", Name: "Snort", URL: "https://snort.social/p/" + code, Platform: "web"}, - {ID: "satellite", Name: "Satellite", URL: "https://satellite.earth/@" + code, Platform: "web"}, - {ID: "coracle", Name: "Coracle", URL: "https://coracle.social/" + code, Platform: "web"}, - {ID: "primal", Name: "Primal", URL: "https://primal.net/profile/" + event.PubKey, Platform: "web"}, - {ID: "nostrudel", Name: "Nostrudel", URL: "https://nostrudel.ninja/#/u/" + code, Platform: "web"}, - {ID: "nostter", Name: "Nostter", URL: "https://nostter.app/" + code, Platform: "web"}, - {ID: "iris", Name: "Iris", URL: "https://iris.to/" + code, Platform: "web"}, - } - - webClients_30024 := []ClientReference{ - {ID: "yakihonne", Name: "YakiHonne", URL: "https://yakihonne.com/article/" + code, Platform: "web"}, - {ID: "habla", Name: "Habla", URL: "https://habla.news/a/" + code, Platform: "web"}, - {ID: "highlighter", Name: "Highlighter", URL: "https://highlighter.com/a/" + code, Platform: "web"}, - {ID: "blogstack", Name: "Blogstack", URL: "https://blogstack.io/" + code, Platform: "web"}, - } - - webClients_1063 := []ClientReference{ - {ID: "native", Name: "your native client", URL: "nostr:" + code, Platform: "web"}, - {ID: "snort", Name: "Snort", URL: "https://snort.social/p/" + code, Platform: "web"}, - {ID: "coracle", Name: "Coracle", URL: "https://coracle.social/" + code, Platform: "web"}, - } - - androidClients := []ClientReference{ - {ID: "yana", Name: "Yana", URL: "intent:" + code + "#Intent;scheme=nostr;package=yana.nostr;end`;", Platform: "android"}, - {ID: "spring", Name: "Spring", URL: "intent:" + code + "#Intent;scheme=nostr;package=com.nostr.universe;end`;", Platform: "android"}, - {ID: "amethyst", Name: "Amethyst", URL: "intent:" + code + "#Intent;scheme=nostr;package=com.vitorpamplona.amethyst;end`;", Platform: "android"}, - {ID: "freefrom", Name: "FreeFrom", URL: "intent:" + code + "#Intent;scheme=nostr;package=com.freefrom;end`;", Platform: "android"}, - {ID: "current", Name: "Current", URL: "intent:" + code + "#Intent;scheme=nostr;package=io.getcurrent.current;end`;", Platform: "android"}, - {ID: "plebstr", Name: "Plebstr", URL: "intent:" + code + "#Intent;scheme=nostr;package=com.plebstr.client;end`;", Platform: "android"}, - // {ID: "", Name: "", URL: "intent:" + code + "#Intent;scheme=nostr;package=;end`;", Platform: "app"}, - } - - iosClients := []ClientReference{ - {ID: "nos", Name: "Nos", URL: "nos:" + code, Platform: "ios"}, - {ID: "damus", Name: "Damus", URL: "damus:" + code, Platform: "ios"}, - {ID: "nostur", Name: "Nostur", URL: "nostur:" + code, Platform: "ios"}, - {ID: "primal", Name: "Primal", URL: "primal:" + code, Platform: "ios"}, - {ID: "freefrom", Name: "FreeFrom", URL: "freefrom:" + code, Platform: "ios"}, - {ID: "plebstr", Name: "Plbestr", URL: "plebstr:" + code, Platform: "ios"}, - } - - clients = append(clients, androidClients...) - clients = append(clients, iosClients...) - - if event.Kind == 1 || event.Kind == 6 { - clients = append(clients, webClients_1_6...) - } else if event.Kind == 0 { - clients = append(clients, webClients_0...) - } else if event.Kind == 30023 || event.Kind == 30024 { - clients = append(clients, webClients_30024...) - } else if event.Kind == 1063 { - clients = append(clients, webClients_1063...) - } - - return clients } func generateRelayBrowserClientList(host string) []ClientReference { return []ClientReference{ - {ID: "coracle", Name: "Coracle", URL: "https://coracle.social/relays/" + host, Platform: "web"}, + coracle, + nostrrr, } } diff --git a/clients.templ b/clients.templ index 1f4688c..817f35e 100644 --- a/clients.templ +++ b/clients.templ @@ -1,6 +1,6 @@ package main -templ clientsTemplate(clients []ClientReference) { +templ clientsTemplate(clients []ClientReference, code string) { - @clientsTemplate(params.Clients) + @clientsTemplate(params.Clients, params.Hostname) @footerTemplate()