From 75fa67ce9869076f2d1994902b2a6a2c14807856 Mon Sep 17 00:00:00 2001 From: cel Date: Thu, 20 Apr 2017 19:34:32 -0700 Subject: Factor out contacts stream handling --- lib/app.js | 114 ++----------------------------------------------------------- 1 file changed, 2 insertions(+), 112 deletions(-) (limited to 'lib/app.js') diff --git a/lib/app.js b/lib/app.js index da15d28..b64ec2a 100644 --- a/lib/app.js +++ b/lib/app.js @@ -8,8 +8,7 @@ var ssbAvatar = require('ssb-avatar') var hasher = require('pull-hash/ext/ssb') var multicb = require('multicb') var paramap = require('pull-paramap') -var many = require('pull-many') -var defer = require('pull-defer') +var Contacts = require('ssb-contact') var Serve = require('./serve') var Render = require('./render') @@ -243,115 +242,6 @@ App.prototype.streamChannels = function (opts) { ) } -App.prototype.streamFollows = function (id) { - return pull( - this.sbot.links({ - source: id, - rel: 'contact', - values: true, - reverse: true, - }), - pull.map(function (msg) { - return msg.value.content - }), - pull.filter(), - pull.unique(function (c) { - return c.contact - }), - pull.filter(function (c) { - return c.following - }), - pull.map(function (c) { - return c.contact - }) - ) -} - -App.prototype.streamFollowers = function (id) { - return pull( - this.sbot.links({ - dest: id, - rel: 'contact', - values: true, - reverse: true, - }), - pull.unique(function (msg) { - return msg.value.author - }), - pull.filter(function (msg) { - var c = msg.value.content - return c && c.following - }), - pull.map(function (msg) { - return msg.value.author - }) - ) -} - -App.prototype.streamFriends = function (id, endCb) { - var follows = {}, followers = {} - return pull( - many([ - pull( - this.streamFollows(id), - pull.map(function (id) { - return {id: id, follow: true} - }) - ), - pull( - this.streamFollowers(id), - pull.map(function (id) { - return {id: id, follower: true} - }) - ) - ]), - pull.filter(function (op) { - if (op.follow) { - if (followers[op.id]) { - delete followers[op.id] - return true - } else { - follows[op.id] = true - return false - } - } - if (op.follower) { - if (follows[op.id]) { - delete follows[op.id] - return true - } else { - followers[op.id] = true - return false - } - } - }), - pull.map(function (op) { - return op.id - }), - endCb && function (read) { - return function (abort, cb) { - read(abort, function (end, data) { - cb(end, data) - if (end) endCb(end === true ? null : end, { - followers: Object.keys(followers), - follows: Object.keys(follows), - }) - }) - } - } - ) -} - App.prototype.createContactStreams = function (id) { - var follows = defer.source() - var followers = defer.source() - var friends = this.streamFriends(id, function (err, more) { - follows.resolve(err ? pull.error(err) : pull.values(more.follows)) - followers.resolve(err ? pull.error(err) : pull.values(more.followers)) - }) - return { - friends: friends, - follows: follows, - followers: followers, - } + return new Contacts(this.sbot).createContactStreams(id) } -- cgit v1.2.3