aboutsummaryrefslogtreecommitdiff
path: root/lib/follows.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/follows.js')
-rw-r--r--lib/follows.js43
1 files changed, 43 insertions, 0 deletions
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)
+}