git ssb

0+

mixmix / ssb-unread



Tree: 7c6c408519e6fa6aa63c57ca89d36e72b2863797

Files: 7c6c408519e6fa6aa63c57ca89d36e72b2863797 / index.js

1722 bytesRaw
1const flumeView = require('flumeview-reduce')
2const mkdirp = require('mkdirp')
3const { join } = require('path')
4const level = require('level')
5const charwise = require('charwise')
6const Value = require('mutant/value')
7
8module.exports = {
9 name: 'unread',
10 version: require('./package.json').version,
11 manifest: {
12 isUnread: 'async',
13 markRead: 'async',
14 unreadObs: 'sync',
15 // stream: 'source'
16 },
17 init: function (server, config) {
18
19 mkdirp.sync(join(config.path, 'unread'))
20 const db = level(join(config.path, 'unread'), {
21 valueEncoding: charwise
22 })
23
24 const STARTED_AT = 'startedAt'
25 db.get(STARTED_AT, (err, ts) => {
26 if (!ts) db.put(STARTED_AT, Date.now())
27
28 // console.log(new Date(ts))
29 // db.put(STARTED_AT, Number(new Date(2018, 6, 1)))
30
31 // NOTE: just using flume to get an up to date list of all messages piped to ssb-unread!
32 const VERSION = 1
33 var queue = []
34 server._flumeUse('unread-dummy-index', flumeView(
35 VERSION,
36 (_, msg) => {
37 db.put(msg.key, null, noop)
38
39 return _
40 }
41 ))
42 })
43
44 function isUnread (key, cb) {
45 return db.get(key, (err, ts) => {
46 if (err) cb(err)
47 else cb(null, Boolean(ts))
48 })
49 }
50
51 function markRead (key, cb = noop) {
52 db.put(key, Date.now(), cb)
53 }
54
55 function unreadObs (key) {
56 const obs = Value(null)
57 isUnread(key, (err, state) => {
58 if (err) console.error(err)
59 else obs.set(state)
60 })
61
62 // remember pull-level
63 // - could use for live updating ?
64
65 return obs
66 }
67
68 return {
69 isUnread,
70 markRead,
71 unreadObs
72 }
73 }
74}
75
76function noop () {}
77

Built with git-ssb-web