diff options
Diffstat (limited to 'desk/lib/trill/feed.hoon')
-rw-r--r-- | desk/lib/trill/feed.hoon | 51 |
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] +-- |