summaryrefslogtreecommitdiff
path: root/desk/lib/nostril/mutations.hoon
blob: 538394747ac00d95a320157923fc9bdf65d796da (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
84
85
86
87
88
89
90
91
92
93
94
95
96
/-  sur=nostril, post, gate, feed
/+  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)
  :: TODO
  `state
  
++  event-parsing
  |=  =event:sur
  ^-  (quip card _state)
  |^
:: 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
  ^-  (quip card _state)
    =/  jstring  content.event
    =/  ujon  (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
  ^-  (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 [-.u.fid 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:sur  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)
  --
--