use tag nodes instead of event tags slice
This commit is contained in:
+14
-37
@@ -152,60 +152,37 @@ func DefaultExpanders() []Expander {
|
||||
}
|
||||
|
||||
func ExpandTaggedEvents(e roots.Event, s *EventSubgraph) {
|
||||
tagNodes := s.NodesByLabel("Tag")
|
||||
for _, tag := range e.Tags {
|
||||
if !IsValidTag(tag) {
|
||||
continue
|
||||
}
|
||||
name := tag[0]
|
||||
value := tag[1]
|
||||
|
||||
if name != "e" || !roots.IsValidID(value) {
|
||||
for _, tag := range s.NodesByLabel("Tag") {
|
||||
if tag.Props["name"] != "e" {
|
||||
continue
|
||||
}
|
||||
|
||||
tagNode := FindTagNode(tagNodes, name, value)
|
||||
if tagNode == nil {
|
||||
id, ok := tag.Props["value"].(string)
|
||||
if !ok || !roots.IsValidID(id) {
|
||||
continue
|
||||
}
|
||||
|
||||
referencedEvent := NewEventNode(value)
|
||||
event := NewEventNode(id)
|
||||
|
||||
s.AddNode(referencedEvent)
|
||||
s.AddRel(NewReferencesEventRel(tagNode, referencedEvent, nil))
|
||||
s.AddNode(event)
|
||||
s.AddRel(NewReferencesEventRel(tag, event, nil))
|
||||
}
|
||||
}
|
||||
|
||||
func ExpandTaggedUsers(e roots.Event, s *EventSubgraph) {
|
||||
tagNodes := s.NodesByLabel("Tag")
|
||||
for _, tag := range e.Tags {
|
||||
if !IsValidTag(tag) {
|
||||
continue
|
||||
}
|
||||
name := tag[0]
|
||||
value := tag[1]
|
||||
|
||||
if name != "p" || !roots.IsValidKey(value) {
|
||||
for _, tag := range s.NodesByLabel("Tag") {
|
||||
if tag.Props["name"] != "p" {
|
||||
continue
|
||||
}
|
||||
|
||||
tagNode := FindTagNode(tagNodes, name, value)
|
||||
if tagNode == nil {
|
||||
pubkey, ok := tag.Props["value"].(string)
|
||||
if !ok || !roots.IsValidKey(pubkey) {
|
||||
continue
|
||||
}
|
||||
|
||||
referencedEvent := NewUserNode(value)
|
||||
user := NewUserNode(pubkey)
|
||||
|
||||
s.AddNode(referencedEvent)
|
||||
s.AddRel(NewReferencesUserRel(tagNode, referencedEvent, nil))
|
||||
s.AddNode(user)
|
||||
s.AddRel(NewReferencesUserRel(tag, user, nil))
|
||||
}
|
||||
}
|
||||
|
||||
func FindTagNode(nodes []*Node, name, value string) *Node {
|
||||
for _, node := range nodes {
|
||||
if node.Props["name"] == name && node.Props["value"] == value {
|
||||
return node
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user