From 631791d5345cbc1c29fc844d5785139dff746958 Mon Sep 17 00:00:00 2001 From: cel Date: Mon, 12 Jun 2017 13:55:42 -1000 Subject: Add mentions page using ssb-backlinks --- lib/app.js | 20 ++++++++++++++++++++ lib/serve.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) (limited to 'lib') diff --git a/lib/app.js b/lib/app.js index 6e182bf..3ff8b81 100644 --- a/lib/app.js +++ b/lib/app.js @@ -501,3 +501,23 @@ App.prototype.streamChannel = function (opts) { return pull.error(new Error( 'Viewing channels/tags requires the ssb-backlinks or ssb-query plugin')) } + +App.prototype.streamMentions = function (opts) { + if (!this.sbot.backlinks) return pull.error(new Error( + 'Viewing mentions requires the ssb-backlinks plugin')) + + if (this.sbot.backlinks) return this.sbot.backlinks.read(u.mergeOpts(opts, { + query: [{$filter: { + dest: this.sbot.id, + value: { + content: { + type: 'post' + } + }, + timestamp: { + $gt: opts.gt, + $lt: opts.lt, + } + }}] + })) +} diff --git a/lib/serve.js b/lib/serve.js index 2d088ae..3e20a0f 100644 --- a/lib/serve.js +++ b/lib/serve.js @@ -276,6 +276,7 @@ Serve.prototype.path = function (url) { case '/new': return this.new(m[2]) case '/public': return this.public(m[2]) case '/private': return this.private(m[2]) + case '/mentions': return this.mentions(m[2]) case '/search': return this.search(m[2]) case '/advsearch': return this.advsearch(m[2]) case '/vote': return this.vote(m[2]) @@ -411,6 +412,32 @@ Serve.prototype.private = function (ext) { ) } +Serve.prototype.mentions = function (ext) { + var self = this + var q = self.query + var opts = { + reverse: !q.forwards, + sortByTimestamp: q.sort === 'claimed', + lt: Number(q.lt) || Date.now(), + gt: Number(q.gt) || -Infinity, + limit: Number(q.limit) || 12, + } + + return pull( + ph('section', {}, [ + ph('h3', 'Mentions'), + pull( + self.app.streamMentions(opts), + self.app.unboxMessages(), + self.renderThreadPaginated(opts, null, q), + self.wrapMessages() + ) + ]), + self.wrapPage('mentions'), + self.respondSink(200) + ) +} + Serve.prototype.search = function (ext) { var searchQ = (this.query.q || '').trim() var self = this @@ -1263,6 +1290,7 @@ Serve.prototype.wrapPage = function (title, searchQ) { h('a', {href: render.toUrl('/new')}, 'new') , ' ', h('a', {href: render.toUrl('/public')}, 'public'), ' ', h('a', {href: render.toUrl('/private')}, 'private') , ' ', + h('a', {href: render.toUrl('/mentions')}, 'mentions') , ' ', h('a', {href: render.toUrl('/peers')}, 'peers') , ' ', h('a', {href: render.toUrl('/channels')}, 'channels') , ' ', h('a', {href: render.toUrl('/friends')}, 'friends'), ' ', -- cgit v1.2.3