summaryrefslogtreecommitdiff
path: root/desk/lib/trill
diff options
context:
space:
mode:
Diffstat (limited to 'desk/lib/trill')
-rw-r--r--desk/lib/trill/feed.hoon51
1 files changed, 51 insertions, 0 deletions
diff --git a/desk/lib/trill/feed.hoon b/desk/lib/trill/feed.hoon
new file mode 100644
index 0000000..c21feb3
--- /dev/null
+++ b/desk/lib/trill/feed.hoon
@@ -0,0 +1,51 @@
+/- feed=trill-feed, sur=nostrill
+/+ sr=sortug, constants
+|%
+++ latest-page |= f=feed:feed ^- fc:feed
+ =/ nodelist (tap:orm:feed f)
+ =/ subset (scag feed-page-size:constants nodelist)
+ ?~ subset [f ~ ~]
+ =/ start `id.i.subset
+ =/ rev (flop subset)
+ ?~ rev [f ~ ~]
+ =/ end `id.i.rev
+ =/ nf (gas:orm:feed *feed:feed subset)
+ [nf start end]
+::
+++ latest-page-nostr |= f=nostr-feed:sur ^- nfc:sur
+ =/ nodelist (tap:norm:sur f)
+ =/ subset (scag feed-page-size:constants nodelist)
+ ?~ subset [f ~ ~]
+ =/ start `id.i.subset
+ =/ rev (flop subset)
+ ?~ rev [f ~ ~]
+ =/ end `id.i.rev
+ =/ nf (gas:norm:sur *nostr-feed:sur subset)
+ [nf start end]
+::
+:: NOTE START IS OLD, END IS NEW
+
+++ subset
+|= [=fc:feed replies=? now=@da] ^- fc:feed
+ ?: ?&(?=(%~ start.fc) ?=(%~ end.fc)) (latest-page feed.fc)
+
+ =/ count feed-page-size:constants
+ =/ start ?~ start.fc 0 u.start.fc
+ =/ end ?~ end.fc now u.end.fc
+ =/ nodelist (tap:orm:feed feed.fc)
+
+ =/ 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)
+ [(gas:orm:feed *feed:feed result) -.cursors +.cursors]
+--