summaryrefslogtreecommitdiff
path: root/desk/lib/nostril/mutations.hoon
blob: f7de23b1155cbaf590702976db76d86da0ecbd05 (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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/-  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)
  --
--