go-nostr/nip94/nip94.go
Cronus c8c295f839
NIP-96 sign payload, content field for file caption (#148)
* content in upload response for file caption as in NIP-94, optional signing of file payload in NIP-98 header

* Content in NIP-94 as well
2024-09-19 11:33:02 -03:00

109 lines
2.2 KiB
Go

package nip94
import (
"strings"
"github.com/nbd-wtf/go-nostr"
)
func ParseFileMetadata(event nostr.Event) FileMetadata {
fm := FileMetadata{}
for _, tag := range event.Tags {
if len(tag) < 2 {
continue
}
switch tag[0] {
case "url":
fm.URL = tag[1]
case "x":
fm.X = tag[1]
case "ox":
fm.OX = tag[1]
case "size":
fm.Size = tag[1]
case "dim":
fm.Dim = tag[1]
case "magnet":
fm.Magnet = tag[1]
case "i":
fm.TorrentInfoHash = tag[1]
case "blurhash":
fm.Blurhash = tag[1]
case "thumb":
fm.Image = tag[1]
case "summary":
fm.Summary = tag[1]
}
}
return fm
}
type FileMetadata struct {
Magnet string
Dim string
Size string
Summary string
Image string
URL string
M string
X string
OX string
TorrentInfoHash string
Blurhash string
Thumb string
Content string
}
func (fm FileMetadata) IsVideo() bool { return strings.Split(fm.M, "/")[0] == "video" }
func (fm FileMetadata) IsImage() bool { return strings.Split(fm.M, "/")[0] == "image" }
func (fm FileMetadata) DisplayImage() string {
if fm.Image != "" {
return fm.Image
} else if fm.IsImage() {
return fm.URL
} else {
return ""
}
}
func (fm FileMetadata) ToTags() nostr.Tags {
tags := make(nostr.Tags, 0, 12)
if fm.URL != "" {
tags = append(tags, nostr.Tag{"url", fm.URL})
}
if fm.M != "" {
tags = append(tags, nostr.Tag{"m", fm.M})
}
if fm.X != "" {
tags = append(tags, nostr.Tag{"x", fm.X})
}
if fm.OX != "" {
tags = append(tags, nostr.Tag{"ox", fm.OX})
}
if fm.Size != "" {
tags = append(tags, nostr.Tag{"size", fm.Size})
}
if fm.Dim != "" {
tags = append(tags, nostr.Tag{"dim", fm.Dim})
}
if fm.Magnet != "" {
tags = append(tags, nostr.Tag{"magnet", fm.Magnet})
}
if fm.TorrentInfoHash != "" {
tags = append(tags, nostr.Tag{"i", fm.TorrentInfoHash})
}
if fm.Blurhash != "" {
tags = append(tags, nostr.Tag{"blurhash", fm.Blurhash})
}
if fm.Thumb != "" {
tags = append(tags, nostr.Tag{"thumb", fm.Thumb})
}
if fm.Image != "" {
tags = append(tags, nostr.Tag{"image", fm.Image})
}
if fm.Summary != "" {
tags = append(tags, nostr.Tag{"summary", fm.Summary})
}
return tags
}