From c329eae0e6ff3d36d7f21349980d51d9dd587faa Mon Sep 17 00:00:00 2001 From: cel Date: Tue, 12 Dec 2017 17:03:17 -0800 Subject: Calculate follows using ssb-contact Avoid use of `live: true` which triggers a bug in the query engine. Use a single live stream to keep called-back objects up-to-date --- lib/follows.js | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 lib/follows.js (limited to 'lib/follows.js') diff --git a/lib/follows.js b/lib/follows.js new file mode 100644 index 0000000..b262520 --- /dev/null +++ b/lib/follows.js @@ -0,0 +1,43 @@ +var pull = require('pull-stream') +var memo = require('asyncmemo') +var lru = require('hashlru') + +module.exports = Follows + +function Follows(sbot, contacts) { + if (!(this instanceof Follows)) return new Follows(sbot) + + this.sbot = sbot + this.contacts = contacts + var followsCache = lru(100) + this.getFollows = memo({cache: followsCache}, this.getFollows) + + pull( + sbot.messagesByType({type: 'contact', old: false}), + pull.drain(function (msg) { + var author = msg && msg.value && msg.value.author + var c = msg && msg.value && msg.value.content + var follows = author && followsCache.get(author) + if (follows && c && c.contact) follows[c.contact] = c.following + }, function (err) { + if (err) console.trace(err) + }) + ) +} + +Follows.prototype.getFollows = function (id, cb) { + var follows = {} + pull( + this.contacts.createFollowsStream(id), + pull.drain(function (feed) { + follows[feed] = true + }, function (err) { + if (err) return cb(err) + cb(null, follows) + }) + ) +} + +Follows.prototype.close = function (cb) { + this.sbot.close(cb) +} -- cgit v1.2.3