index.jsView |
---|
59 | 59 … | var sysDB = db.sublevel('sys') |
60 | 60 … | var logDB = db.sublevel('log') |
61 | 61 … | var feedDB = require('./indexes/feed')(db) |
62 | 62 … | var clockDB = require('./indexes/clock')(db) |
63 | | - var lastDB = db.sublevel('lst') |
| 63 … | + var lastDB = require('./indexes/last')(db) |
64 | 64 … | var indexDB = db.sublevel('idx') |
65 | 65 … | var appsDB = db.sublevel('app') |
66 | 66 … | |
67 | 67 … | function get (db, key) { |
73 | 73 … | db.add = Validator(db) |
74 | 74 … | |
75 | 75 … | var realtime = Notify() |
76 | 76 … | |
77 | | - db.seen = 0 |
| 77 … | + var await = u.await() |
| 78 … | + var set = await.set |
| 79 … | + await.set = null |
| 80 … | + var waiting = [] |
| 81 … | + db.seen = await |
78 | 82 … | db.post(function (op) { |
79 | | - db.seen = op.ts || op.timestamp |
| 83 … | + set(Math.max(op.ts || op.timestamp, await.get()||0)) |
80 | 84 … | }) |
| 85 … | + |
81 | 86 … | peek.last(logDB, {keys: true}, function (err, key) { |
82 | | - db.seen = key |
| 87 … | + set(Math.max(key || 0, await.get()||0)) |
83 | 88 … | }) |
| 89 … | + |
84 | 90 … | db.pre(function (op, _add, _batch) { |
85 | 91 … | var msg = op.value |
86 | 92 … | var id = op.key |
87 | 93 … | |
93 | 99 … | } |
94 | 100 … | |
95 | 101 … | var localtime = op.timestamp = timestamp() |
96 | 102 … | |
97 | | - |
98 | 103 … | add({ |
99 | | - key: msg.author, value: {sequence: msg.sequence, ts: localtime }, |
100 | | - type: 'put', prefix: lastDB |
101 | | - }) |
102 | | - |
103 | | - |
104 | | - |
105 | | - |
106 | | - |
107 | | - add({ |
108 | 104 … | key: localtime, value: id, |
109 | 105 … | type: 'put', prefix: logDB |
110 | 106 … | }) |
111 | 107 … | |
197 | 193 … | function toSeq (latest) { |
198 | 194 … | return isNumber(latest) ? latest : latest.sequence |
199 | 195 … | } |
200 | 196 … | |
201 | | - db.latest = function (opts) { |
202 | | - return pull( |
203 | | - pl.read(lastDB, opts), |
204 | | - pull.map(function (data) { |
205 | | - var d = {id: data.key, sequence: toSeq(data.value), ts: data.value.ts } |
206 | | - return d |
207 | | - }) |
208 | | - ) |
209 | | - } |
210 | | - |
211 | 197 … | function lookup(keys, values) { |
212 | 198 … | return paramap(function (key, cb) { |
213 | 199 … | if(key.sync) return cb(null, key) |
214 | 200 … | if(!values) return cb(null, key) |
215 | 201 … | db.get(key, function (err, msg) { |
216 | 202 … | if (err) cb(err) |
217 | 203 … | else { |
218 | | - cb(null, msgFmt(keys, values, { key: key, value: msg })) |
| 204 … | + cb(null, u.format(keys, values, { key: key, value: msg })) |
219 | 205 … | } |
220 | 206 … | }) |
221 | 207 … | }) |
222 | 208 … | } |
246 | 232 … | keys = opts.keys.generate() |
247 | 233 … | return createFeed(db, keys, opts) |
248 | 234 … | } |
249 | 235 … | |
| 236 … | + db.latest = lastDB.latest |
| 237 … | + |
250 | 238 … | db.latestSequence = function (id, cb) { |
251 | 239 … | lastDB.get(id, cb) |
252 | 240 … | } |
253 | 241 … | |
489 | 477 … | |
490 | 478 … | var _close = db.close |
491 | 479 … | |
492 | 480 … | db.close = function (cb) { |
493 | | - var n = 3 |
| 481 … | + var n = 4 |
494 | 482 … | clockDB.close(next) |
495 | 483 … | feedDB.close(next) |
| 484 … | + lastDB.close(next) |
496 | 485 … | _close.call(db, next) |
497 | 486 … | function next (err) { |
498 | 487 … | if(n < 0) return |
499 | 488 … | if(err) return n = -1, cb(err) |
504 | 493 … | |
505 | 494 … | return db |
506 | 495 … | } |
507 | 496 … | |
508 | | - |
509 | | - |