A ssb-server plugin which tracks read / unread state of all received messages in a mutable level db. The intention is to provide a persistent store which can be referenced and contributed to by a plurality of client interfaces.
Note that this unread state is "off-chain", as in it's not stored in your log, so others won't be able to see it, and if you lose your computer you won't be able to recover your unread record.
sbot.unread.isRead(key, cb)Provide a message key and get a boolean response back in the callback
sbot.unread.markRead(key, cb)mark a message key as read
var Server = require('ssb-server')
var Config = require('ssb-config/inject')
Server
.use(require('ssb-server/plugins/master'))
.use(require('ssb-unread')) // <<
var server = Server(Config())
var msgId = '%fJ900xKrMIJ1NM09V05z++GLy92O9NP9Hh5hpM1MeA4=.sha256'
server.unread.isRead(msgId, (err, bool) => {
console.log(msgId, 'has been read:', bool)
})
// server.js
var Server = require('ssb-server')
var Config = require('ssb-config/inject')
Server
.use(require('ssb-server/plugins/master'))
.use(require('ssb-backlinks'))
.use(require('ssb-unread')) // <<
var server = Server(Config())
// client.js (connecting remotely from front end to back end)
var Client = require('ssb-client')
var Config = require('ssb-config/inject')
var pull = require('pull-stread')
var pullParallelMap = require('pull-paramap')
var config = Config()
Client(config.keys, config, (err, server) => {
pull(
pullMentions(server),
pullParallelMap((msg, cb) => {
server.unread.isRead(msg.key, (err, bool) => {
if (bool) cb(null, null) // drop the read messages
else cb(null, msg)
})
}, 5),
pull.filter(Boolean), // filter out the null entries
pull.take(20), // don't pull the whole database!
pull.collect((err, unreadMentions) => {
// ... do something
})
})
})
function pullMentions (server, feedId) {
return server.backlinks.read({
query: [{
$filter: {
dest: server.id, // mentions about me
}
}],
reverse: true,
live: false
})
// Note this likely needs validation + sorting!
}