git ssb

0+

Josiah / ssb-tags



Tree: 9fc97c76b6c3a194ee7d1ccab6a3fe398866e4b4

Files: 9fc97c76b6c3a194ee7d1ccab6a3fe398866e4b4 / index.js

2100 bytesRaw
1var FlumeReduce = require('flumeview-reduce')
2var ref = require('ssb-ref')
3
4exports.name = 'tags'
5exports.version = require('./package.json').version
6exports.manifest = {
7 stream: 'source',
8 get: 'async'
9}
10
11exports.init = function (ssb, config) {
12 return ssb._flumeUse('tags', FlumeReduce('test', reduce, map))
13
14 function reduce (result, item) {
15 if (!result) result = {}
16 if (!result.tags) result.tags = {}
17 if (!result.messages) result.messages = {}
18 var tags = result.tags
19 var messages = result.messages
20
21 if (item) {
22 var { tag, author, message, tagged, timestamp } = item
23
24 if (!tags[author]) tags[author] = {}
25 if (!tags[author][tag]) tags[author][tag] = {}
26 if (
27 tagged &&
28 (!tags[author][tag][message] ||
29 timestamp > tags[author][tag][message].timestamp)
30 ) {
31 tags[author][tag][message] = { timestamp, tagged }
32 } else if (!tagged && tags[author][tag][message]) {
33 delete tags[author][tag][message]
34 }
35
36 if (!messages[message]) messages[message] = {}
37 if (!messages[message][tag]) messages[message][tag] = {}
38 if (
39 tagged &&
40 (!messages[message][tag][author] ||
41 timestamp > messages[message][tag][author].timestamp)
42 ) {
43 messages[message][tag][author] = { timestamp, tagged }
44 } else if (!tagged && messages[message][tag][author]) {
45 delete messages[message][tag][authpr]
46 }
47 }
48
49 return result
50 }
51
52 function map (msg) {
53 // only include your own tags (for now)
54 if (msg.value.author !== ssb.id) return
55
56 // unbox private message
57 if (msg.value.content === 'string') {
58 // unbox private message (requires ssb-private plugin)
59 msg = ssb.private.unbox(msg)
60 }
61
62 if (msg.value.content && msg.value.content.type === 'tag' && ref.isLink(msg.value.content.message)) {
63 return {
64 tag: msg.key,
65 author: msg.value.author,
66 message: msg.value.content.message,
67 tagged: msg.value.content.tagged,
68 timestamp: msg.value.timestamp
69 }
70 }
71 }
72}
73

Built with git-ssb-web