diff options
Diffstat (limited to 'desk/lib/nostril/mutations.hoon')
-rw-r--r-- | desk/lib/nostril/mutations.hoon | 83 |
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 + -- +-- |