mirror of
https://github.com/nbd-wtf/go-nostr.git
synced 2025-03-18 13:53:03 +01:00
74 lines
1.3 KiB
Go
74 lines
1.3 KiB
Go
package nip92
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/nbd-wtf/go-nostr"
|
|
)
|
|
|
|
type IMeta []IMetaEntry
|
|
|
|
func (imeta IMeta) Get(url string) (IMetaEntry, bool) {
|
|
for _, entry := range imeta {
|
|
if entry.URL == url {
|
|
return entry, true
|
|
}
|
|
}
|
|
return IMetaEntry{}, false
|
|
}
|
|
|
|
type IMetaEntry struct {
|
|
URL string
|
|
Blurhash string
|
|
Width int
|
|
Height int
|
|
Alt string
|
|
}
|
|
|
|
func ParseTags(tags nostr.Tags) IMeta {
|
|
var imeta IMeta
|
|
for i, tag := range tags {
|
|
if len(tag) > 2 && tag[0] == "imeta" {
|
|
entry := IMetaEntry{}
|
|
for _, item := range tag[1:] {
|
|
div := strings.Index(item, " ")
|
|
switch item[0:div] {
|
|
case "url":
|
|
entry.URL = item[div+1:]
|
|
case "alt":
|
|
entry.Alt = item[div+1:]
|
|
case "blurhash":
|
|
entry.Blurhash = item[div+1:]
|
|
case "dim":
|
|
xySplit := strings.Index(item[div+1:], "x")
|
|
if xySplit == -1 {
|
|
// if any tag is wrong them we don't trust this guy anyway
|
|
return nil
|
|
}
|
|
|
|
x, err := strconv.Atoi(item[div+1 : div+1+xySplit])
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
entry.Width = x
|
|
|
|
y, err := strconv.Atoi(item[div+1+xySplit+1:])
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
entry.Height = y
|
|
}
|
|
}
|
|
|
|
if imeta == nil {
|
|
imeta = make(IMeta, 1, len(tags)-i)
|
|
imeta[0] = entry
|
|
} else {
|
|
imeta = append(imeta, entry)
|
|
}
|
|
}
|
|
}
|
|
return imeta
|
|
}
|