git ssb

7+

dinoworm ๐Ÿ› / patchcore



Tree: a1c9fd5d55410d71adcc2eb1d35758b9e531a3a5

Files: a1c9fd5d55410d71adcc2eb1d35758b9e531a3a5 / feed / pull / mentions.js

1877 bytesRaw
1const nest = require('depnest')
2const extend = require('xtend')
3const pull = require('pull-stream')
4const ref = require('ssb-ref')
5
6exports.needs = nest({
7 'sbot.pull.log': 'first',
8 'message.sync.unbox': 'first',
9 'sbot.sync.cache': 'first'
10})
11
12exports.gives = nest('feed.pull.mentions')
13
14exports.create = function (api) {
15 return nest('feed.pull.mentions', function (id) {
16 if (!ref.isFeed(id)) throw new Error('a feed id must be specified')
17 var cache = api.sbot.sync.cache()
18
19 return function getStream (opts) {
20 opts = extend(opts)
21 var take = opts.limit
22 opts.limit = 5000
23
24 var stream = pull(
25 api.sbot.pull.log(opts),
26 unboxIfNeeded(),
27 pull.filter((msg) => {
28 if (!msg) return false
29 if (msg.sync) return true
30 return msg.value.author !== id && belongsToUs([
31 msg.value.content.mentions,
32 msg.value.content.root,
33 msg.value.content.branch,
34 msg.value.content.repo,
35 msg.value.content.vote,
36 msg.value.content.about,
37 msg.value.content.contact
38 ])
39 })
40 )
41
42 if (take) {
43 return pull(
44 stream,
45 pull.take(take)
46 )
47 } else {
48 return stream
49 }
50 }
51
52 function belongsToUs (link) {
53 if (Array.isArray(link)) {
54 return link.some(belongsToUs)
55 }
56 if (link) {
57 link = typeof link === 'object' ? link.link : link
58 if (link === id) return true
59 var item = cache[link]
60 if (item) {
61 return (item.author === id)
62 }
63 }
64 }
65 })
66
67 function unboxIfNeeded () {
68 return pull.map(function (msg) {
69 if (msg.sync || (msg.value && typeof msg.value.content === 'object')) {
70 return msg
71 } else {
72 return api.message.sync.unbox(msg)
73 }
74 })
75 }
76}
77

Built with git-ssb-web