Files: 7c6c408519e6fa6aa63c57ca89d36e72b2863797 / index.js
1722 bytesRaw
1 | const flumeView = require('flumeview-reduce') |
2 | const mkdirp = require('mkdirp') |
3 | const { join } = require('path') |
4 | const level = require('level') |
5 | const charwise = require('charwise') |
6 | const Value = require('mutant/value') |
7 | |
8 | module.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 | |
76 | function noop () {} |
77 |
Built with git-ssb-web