From 2fecd4e5f20ea607dc7fa327903ca6990bc539ea Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Mon, 30 Oct 2023 22:28:33 -0300 Subject: [PATCH] turn kind1063Metadata into a struct. --- data.go | 101 ++++++++++++++++++++++++++++++------------------ pages.go | 2 +- render_event.go | 30 +++++++------- 3 files changed, 80 insertions(+), 53 deletions(-) diff --git a/data.go b/data.go index fa47aba..d219126 100644 --- a/data.go +++ b/data.go @@ -85,7 +85,23 @@ type Data struct { videoType string image string content string - kind1063Metadata map[string]string + alt string + kind1063Metadata *Kind1063Metadata +} + +type Kind1063Metadata struct { + magnet string + dim string + size string + summary string + image string + url string + aes256gcm string + m string + x string + i string + blurhash string + thumb string } func grabData(ctx context.Context, code string, isProfileSitemap bool) (*Data, error) { @@ -119,7 +135,8 @@ func grabData(ctx context.Context, code string, isProfileSitemap bool) (*Data, e authorRelays := []string{} var content string var templateId TemplateID - var kind1063Metadata map[string]string + var alt string + var kind1063Metadata *Kind1063Metadata eventRelays := []string{} for _, relay := range relays { @@ -134,6 +151,10 @@ func grabData(ctx context.Context, code string, isProfileSitemap bool) (*Data, e eventRelays = append(eventRelays, trimProtocol(relay)) } + if tag := event.Tags.GetFirst([]string{"alt", ""}); tag != nil { + alt = (*tag)[1] + } + switch event.Kind { case 0: { @@ -176,39 +197,44 @@ func grabData(ctx context.Context, code string, isProfileSitemap bool) (*Data, e } case 1063: templateId = FileMetadata - kind1063Metadata = make(map[string]string) + kind1063Metadata = &Kind1063Metadata{} - keysToExtract := []string{ - "url", - "m", - "aes-256-gcm", - "x", - "size", - "dim", - "magnet", - "i", - "blurhash", - "thumb", - "image", - "summary", - "alt", + if tag := event.Tags.GetFirst([]string{"url", ""}); tag != nil { + kind1063Metadata.url = (*tag)[1] } - - for _, tag := range event.Tags { - if len(tag) == 2 { - key := tag[0] - value := tag[1] - - // Check if the key is in the list of keys to extract - for _, k := range keysToExtract { - if key == k { - kind1063Metadata[key] = value - break - } - } - } + if tag := event.Tags.GetFirst([]string{"m", ""}); tag != nil { + kind1063Metadata.m = (*tag)[1] + } + if tag := event.Tags.GetFirst([]string{"aes-256-gcm", ""}); tag != nil { + kind1063Metadata.aes256gcm = (*tag)[1] + } + if tag := event.Tags.GetFirst([]string{"x", ""}); tag != nil { + kind1063Metadata.x = (*tag)[1] + } + if tag := event.Tags.GetFirst([]string{"size", ""}); tag != nil { + kind1063Metadata.size = (*tag)[1] + } + if tag := event.Tags.GetFirst([]string{"dim", ""}); tag != nil { + kind1063Metadata.dim = (*tag)[1] + } + if tag := event.Tags.GetFirst([]string{"magnet", ""}); tag != nil { + kind1063Metadata.magnet = (*tag)[1] + } + if tag := event.Tags.GetFirst([]string{"i", ""}); tag != nil { + kind1063Metadata.i = (*tag)[1] + } + if tag := event.Tags.GetFirst([]string{"blurhash", ""}); tag != nil { + kind1063Metadata.blurhash = (*tag)[1] + } + if tag := event.Tags.GetFirst([]string{"thumb", ""}); tag != nil { + kind1063Metadata.thumb = (*tag)[1] + } + if tag := event.Tags.GetFirst([]string{"image", ""}); tag != nil { + kind1063Metadata.image = (*tag)[1] + } + if tag := event.Tags.GetFirst([]string{"summary", ""}); tag != nil { + kind1063Metadata.summary = (*tag)[1] } - default: if event.Kind >= 30000 && event.Kind < 40000 { templateId = Other @@ -238,11 +264,11 @@ func grabData(ctx context.Context, code string, isProfileSitemap bool) (*Data, e var video string var videoType string if event.Kind == 1063 { - if strings.HasPrefix(kind1063Metadata["m"], "image") { - image = kind1063Metadata["url"] - } else if strings.HasPrefix(kind1063Metadata["m"], "video") { - video = kind1063Metadata["url"] - videoType = strings.Split(kind1063Metadata["m"], "/")[1] + if strings.HasPrefix(kind1063Metadata.m, "image") { + image = kind1063Metadata.url + } else if strings.HasPrefix(kind1063Metadata.m, "video") { + video = kind1063Metadata.url + videoType = strings.Split(kind1063Metadata.m, "/")[1] } } else { urls := urlMatcher.FindAllString(event.Content, -1) @@ -304,6 +330,7 @@ func grabData(ctx context.Context, code string, isProfileSitemap bool) (*Data, e videoType: videoType, image: image, content: content, + alt: alt, kind1063Metadata: kind1063Metadata, }, nil } diff --git a/pages.go b/pages.go index 14a05ec..237fb2d 100644 --- a/pages.go +++ b/pages.go @@ -270,7 +270,7 @@ type FileMetadataPage struct { ParentLink template.HTML Proxy string SeenOn []string - Style string + Style Style Subject string TextImageURL string Title string diff --git a/render_event.go b/render_event.go index 1d1d686..3ed7f49 100644 --- a/render_event.go +++ b/render_event.go @@ -231,10 +231,10 @@ func renderEvent(w http.ResponseWriter, r *http.Request) { SeenOn: data.relays, Npub: data.npub, Nprofile: data.nprofile, - Magnet: data.kind1063Metadata["magnet"], - Dim: data.kind1063Metadata["dim"], - Size: data.kind1063Metadata["size"], - Summary: data.kind1063Metadata["summary"], + Magnet: data.kind1063Metadata.magnet, + Dim: data.kind1063Metadata.dim, + Size: data.kind1063Metadata.size, + Summary: data.kind1063Metadata.summary, } switch data.templateId { @@ -285,7 +285,7 @@ func renderEvent(w http.ResponseWriter, r *http.Request) { VideoType: data.videoType, }) case FileMetadata: - thisImage := data.kind1063Metadata["image"] + thisImage := data.kind1063Metadata.image if thisImage == "" && data.image != "" { thisImage = data.image } @@ -298,7 +298,7 @@ func renderEvent(w http.ResponseWriter, r *http.Request) { }, DetailsPartial: detailsData, ClientsPartial: ClientsPartial{ - Clients: generateClientList(code, data.event), + Clients: generateClientList(style, code, data.event), }, AuthorLong: data.authorLong, @@ -315,16 +315,16 @@ func renderEvent(w http.ResponseWriter, r *http.Request) { TwitterTitle: twitterTitle, Video: data.video, VideoType: data.videoType, - Url: data.kind1063Metadata["url"], - M: data.kind1063Metadata["m"], - Aes256Gcm: data.kind1063Metadata["aes-256-gcm"], - X: data.kind1063Metadata["x"], - I: data.kind1063Metadata["i"], - Blurhash: data.kind1063Metadata["blurhash"], - Thumb: data.kind1063Metadata["thumb"], + Url: data.kind1063Metadata.url, + M: data.kind1063Metadata.m, + Aes256Gcm: data.kind1063Metadata.aes256gcm, + X: data.kind1063Metadata.x, + I: data.kind1063Metadata.i, + Blurhash: data.kind1063Metadata.blurhash, + Thumb: data.kind1063Metadata.thumb, Image: thisImage, - Alt: data.kind1063Metadata["alt"], - MType: strings.Split(data.kind1063Metadata["m"], "/")[0], + Alt: data.alt, + MType: strings.Split(data.kind1063Metadata.m, "/")[0], }) case Other: err = OtherTemplate.Render(w, &OtherPage{