git ssb

7+

dinoworm ๐Ÿ› / patchcore



Tree: aeffed8b04f94878e4481ca09cd5359940c55102

Files: aeffed8b04f94878e4481ca09cd5359940c55102 / feed / pull / rollup.js

1516 bytesRaw
1// read stream to get events
2// for each item, check to see if already rendered root
3// accept prioritized list (render these first)
4
5var pull = require('pull-stream')
6var nest = require('depnest')
7var extend = require('xtend')
8
9exports.needs = nest({
10 'sbot.pull.backlinks': 'first',
11 'sbot.async.get': 'first',
12 'message.sync.root': 'first',
13 'message.sync.unbox': 'first'
14})
15
16exports.gives = nest('feed.pull.rollup', true)
17
18exports.create = function (api) {
19 return nest('feed.pull.rollup', function (rootFilter) {
20 return pull(
21 pull.map(msg => api.message.sync.root(msg) || msg.key),
22 pull.unique(),
23 Lookup(),
24 pull.filter(msg => msg && msg.value && !api.message.sync.root(msg)),
25 pull.filter(rootFilter || (() => true)),
26 AddReplies()
27 )
28 })
29
30 // scoped
31 function Lookup () {
32 return pull.asyncMap((key, cb) => {
33 api.sbot.async.get(key, (_, value) => {
34 if (typeof value.content === 'string') {
35 value = api.message.sync.unbox(value)
36 }
37 cb(null, {key, value})
38 })
39 })
40 }
41
42 function AddReplies () {
43 return pull.asyncMap((rootMessage, cb) => {
44 pull(
45 api.sbot.pull.backlinks({
46 query: [{$filter: { dest: rootMessage.key }}]
47 }),
48 pull.filter(msg => api.message.sync.root(msg) || rootMessage.key === rootMessage.key),
49 pull.collect((err, replies) => {
50 if (err) return cb(err)
51 cb(null, extend(rootMessage, { replies }))
52 })
53 )
54 })
55 }
56}
57

Built with git-ssb-web