summaryrefslogtreecommitdiff
path: root/desk/lib/scri.hoon
diff options
context:
space:
mode:
Diffstat (limited to 'desk/lib/scri.hoon')
-rw-r--r--desk/lib/scri.hoon70
1 files changed, 70 insertions, 0 deletions
diff --git a/desk/lib/scri.hoon b/desk/lib/scri.hoon
new file mode 100644
index 0000000..b590624
--- /dev/null
+++ b/desk/lib/scri.hoon
@@ -0,0 +1,70 @@
+/- sur=nostrill, nsur=nostr, comms=nostrill-comms,
+ post=trill-post, gate=trill-gate, feed=trill-feed
+
+/+ appjs=json-nostrill,
+ lib=nostrill,
+ njs=json-nostr,
+ feedlib=trill-feed,
+ postlib=trill-post,
+ shim,
+ constants,
+ sr=sortug
+
+|_ [=state:sur =bowl:gall]
++$ card card:agent:gall
+++ thread |= [hs=@t ids=@t]
+ ^- (unit (unit cage)) :- ~ :- ~ :- %json !>
+ %- beg-res:en:appjs
+ ^- res:comms
+ =/ host (slaw %p hs)
+ ?~ host [%ng 'Host is not a @p']
+ :: TODO what about non urbit stuff
+ =/ =user:sur [%urbit u.host]
+ =/ fed=(unit feed:feed) ?: .=(u.host our.bowl) `feed.state (~(get by following.state) user)
+ ?~ fed [%ng 'Feed not found']
+ =/ id (slaw:sr %ud ids) ?~ id [%ng 'Post ID malformed']
+ =/ node (get:orm:feed u.fed u.id)
+ ?~ node [%ng 'Post not found in feed']
+ =/ fn (node-to-full:feedlib u.node u.fed)
+ [%ok %thread fn]
+
+++ sfeed |= [hs=@t s=@t e=@t c=@ n=@ r=@]
+ ^- (unit (unit cage)) :- ~ :- ~ :- %json !>
+ %- beg-res:en:appjs
+ ^- res:comms
+ =/ host (slaw %p hs)
+ ?~ host [%ng 'Host is not a @p']
+ =/ =user:sur [%urbit u.host]
+ =/ fed=(unit feed:feed) ?: .=(u.host our.bowl) `feed.state (~(get by following.state) user)
+ ?~ fed [%ng 'Feed not found']
+ =/ start=(unit @da) (timestamp:sr s)
+ =/ end (timestamp:sr e)
+ =/ cont (slaw:sr %ud c)
+ =/ count ?~ cont feed-page-size:constants u.cont
+ =/ newest !=('0' n)
+ :: =/ nodelist (tap:orm:feed u.fed)
+ :: =/ replies=? !=('0' r)
+ :: =/ threads %+ skim nodelist
+ :: |= [=id:post =post:post] ^- ?
+ :: ?. replies
+ :: ?&
+ :: ?= %~ parent.post
+ :: (lte id start) (gte id end)
+ :: ==
+ :: ?& (lte id start) (gte id end) ==
+ :: =/ thread-count (lent threads)
+ :: =/ result=(list [id:post post:post]) ?: newest (scag count threads) (flop (scag count (flop threads)))
+ :: =/ cursors=[(unit @da) (unit @da)] ?~ result [~ ~] ?~ threads [~ ~] :-
+ :: ?: .=((head result) (head threads)) ~ `id:(head result)
+ :: ?: .=((rear result) (rear threads)) ~ `id:(rear result)
+ :: =/ =fc:feed [(gas:orm:feed *feed:feed result) -.cursors +.cursors]
+ :: TODO counts and order
+ =/ nf (lot:orm:feed u.fed start end)
+ =/ hed (pry:orm:feed nf)
+ =/ tal (ram:orm:feed nf)
+ =/ ns=(unit @da) ?~ hed ~ (some key.u.hed)
+ =/ ne=(unit @da) ?~ tal ~ (some key.u.tal)
+ =/ =fc:feed [nf ns ne]
+ =/ profile (~(get by profiles.state) user)
+ [%ok %feed fc profile]
+--