mirror of
https://github.com/nbd-wtf/go-nostr.git
synced 2025-03-17 13:22:56 +01:00
60 lines
1.0 KiB
Go
60 lines
1.0 KiB
Go
package nip34
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/bluekeyes/go-gitdiff/gitdiff"
|
|
"github.com/nbd-wtf/go-nostr"
|
|
)
|
|
|
|
type Patch struct {
|
|
nostr.Event
|
|
|
|
Repository nostr.EntityPointer
|
|
|
|
Files []*gitdiff.File
|
|
Header *gitdiff.PatchHeader
|
|
}
|
|
|
|
func ParsePatch(event nostr.Event) Patch {
|
|
patch := Patch{
|
|
Event: event,
|
|
}
|
|
|
|
for _, tag := range event.Tags {
|
|
if len(tag) < 2 {
|
|
continue
|
|
}
|
|
switch tag[0] {
|
|
case "a":
|
|
spl := strings.Split(tag[1], ":")
|
|
if len(spl) != 3 {
|
|
continue
|
|
}
|
|
if !nostr.IsValid32ByteHex(spl[1]) {
|
|
continue
|
|
}
|
|
patch.Repository.Kind = nostr.KindRepositoryAnnouncement
|
|
patch.Repository.PublicKey = spl[1]
|
|
patch.Repository.Identifier = spl[2]
|
|
if len(tag) >= 3 {
|
|
patch.Repository.Relays = []string{tag[2]}
|
|
}
|
|
}
|
|
}
|
|
|
|
files, preamble, err := gitdiff.Parse(strings.NewReader(event.Content))
|
|
if err != nil {
|
|
return patch
|
|
}
|
|
patch.Files = files
|
|
|
|
header, err := gitdiff.ParsePatchHeader(preamble)
|
|
if err != nil {
|
|
return patch
|
|
}
|
|
patch.Header = header
|
|
|
|
return patch
|
|
}
|