summaryrefslogtreecommitdiff
path: root/desk/lib/nostril/mutations.hoon
blob: 68c82d37a650b97df831963d21eb564a3a184080 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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
  --
--