summaryrefslogtreecommitdiff
path: root/desk/lib/nostril/mutations.hoon
diff options
context:
space:
mode:
Diffstat (limited to 'desk/lib/nostril/mutations.hoon')
-rw-r--r--desk/lib/nostril/mutations.hoon83
1 files changed, 83 insertions, 0 deletions
diff --git a/desk/lib/nostril/mutations.hoon b/desk/lib/nostril/mutations.hoon
new file mode 100644
index 0000000..68c82d3
--- /dev/null
+++ b/desk/lib/nostril/mutations.hoon
@@ -0,0 +1,83 @@
+/- sur=nostril, post
+/+ shim, postlib=nostril-post, sr=sortug
+|_ [=state:sur =bowl:gall]
+++ process-events ^- (quip card _state)
+ =/ l events.state
+ =| cards=(list card:agent:gall)
+ |- ?~ l [cards state]
+ =/ n (event-parsing i.l)
+ $(cards -.n, state +.n, l t.l)
+
+++ event-parsing ^- (quip card _state)
+ |= =event:sur
+ |^
+:: https://nostrdata.github.io/kinds/
+ ?: .=(kind.event 0) :: user metadata
+ parse-metadata
+ ?: .=(kind.event 1) :: apparently a poast, not sure which NIP
+ parse-poast
+ ?: .=(kind.event 2) :: recommended reay
+ parse-poast
+ ?: .=(kind.event 3) :: follow list
+ parse-follow
+ :: ?: .=(kind.event 5) :: delete
+ ?: .=(kind.event 6) :: RT
+ parse-follow
+ ?: .=(kind.event 7) :: Reaction
+ parse-follow
+
+ `state
+
+ ++ parse-metadata
+ =/ jstring content.event
+ =/ ujon=json (de:json:html jstring)
+ ?~ ujon !!
+ =/ =user-meta:sur (metadata:dejs:shim u.ujon)
+ =/ fid (~(get by following.state) pubkey.event)
+ ?~ fid `state
+ =/ nfid [user-meta feed.u.fid]
+ =. following.state (~(put by following.state) pubkey.event nfid)
+ `state
+
+
+ ++ parse-poast |= =event:sur
+ =/ fid (~(get by following.state) pubkey.event)
+ ?~ fid `state :: don't save post if we don't follow the fucker
+
+ =/ cl (tokenize:postlib content.event)
+
+ =/ ts (from-unix:jikan:sr created-at.event)
+ =/ cm (init-content-map:postlib cl ts)
+
+ =/ =post:post :*
+ id=ts
+ author=pubkey.event
+ thread=~
+ parent=~
+ contents=cm
+ read=*lock:gate
+ write=*lock:gate
+ *engagement:post
+ 0
+ *signature:post
+ tags=~
+ ==
+ =/ nfid (put:orm:post u.fid ts post)
+ =. following.state (~(put by following.state) pubkey.event nfid)
+ `state
+
+
+ ++ parse-follow
+ %+ turn tags.event |= t=tag:sur
+ ?> .=('p' key.t)
+ =/ pubkey value.t
+ =/ relay (snag 0 rest.t)
+ =/ rel ?: .=(relay '') ~ (some relay)
+ =/ nickname (snag 1 rest.t)
+ =/ following (~(get by follow-graph.state) pubkey.event)
+ =/ meta [pubkey nickname rel]
+ =/ nfollowing ?~ following (silt ~[meta]) (~(put in u.following) meta)
+ =. following-graph.state (~(put by follow-graph.state) pubkey.event nfollowing)
+ `state
+ --
+--