/- sur=nostril, nsur=nostr, post=trill-post, gate=trill-gate, feed=trill-feed /+ appjs=json-nostril, njs=json-nostr, postlib=nostril-post, sr=sortug |_ [=state:sur =bowl:gall] ++ debug-own-feed =/ postlist (tap:orm:feed feed.state) =/ lol |- ?~ postlist ~ ~& >> poast=+.i.postlist $(postlist t.postlist) ~ :: TODO not a mutation but fuck it ++ get-poast |= [host=@p id=@] ^- (unit post:post) =/ poast ?: .=(host our.bowl) (get:orm:feed feed.state id) ~ poast :: state ++ add-to-feed |= p=post:post =. feed.state (put:orm:feed feed.state id.p p) state :: events ++ 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) :: TODO `state ++ event-parsing |= =event:nsur ^- (quip card _state) |^ :: https://nostrdata.github.io/kinds/ ?: .=(kind.event 0) :: user metadata parse-metadata ?: .=(kind.event 1) :: apparently a poast 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 ^- (quip card _state) =/ jstring content.event =/ ujon (de:json:html jstring) ?~ ujon !! =/ umeta (user-meta:de:njs u.ujon) ?~ umeta `state =. profiles.state (~(put by profiles.state) pubkey.event u.umeta) `state ++ parse-poast ^- (quip card _state) =/ 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) :: TODO wtf =/ cm=content-map:post (init-content-map:postlib cl ts) =/ p=post:post :* id=ts host=`@p`pubkey.event author=`@p`pubkey.event thread=ts parent=~ children=~ contents=cm read=*lock:gate write=*lock:gate *engagement:post 0v0 *signature:post tags=~ == =/ nfid (put:orm:feed u.fid ts p) =. following.state (~(put by following.state) pubkey.event nfid) `state ++ parse-follow ^- (quip card _state) =/ following (~(get by follow-graph.state) pubkey.event) =/ follow-set ?~ following *(set follow:sur) u.following |- ?~ tags.event `state =/ t=tag:nsur i.tags.event :: ?. .=('p' key.t) $(tags.event t.tags.event) :: =/ pubkeys value.t :: =/ pubkey (slaw:sr %ux pubkeys) :: ?~ pubkey ~& "parsing hex error" $(tags.event t.tags.event) :: =/ relay (snag 0 rest.t) :: =/ rel ?: .=(relay '') ~ (some relay) :: =/ nickname (snag 1 rest.t) :: =/ meta=follow:sur [u.pubkey nickname rel] :: =. follow-set (~(put in follow-set) meta) :: =. follow-graph.state (~(put by follow-graph.state) pubkey.event follow-set) $(tags.event t.tags.event) -- --