aboutsummaryrefslogtreecommitdiff
path: root/lib/serve.js
diff options
context:
space:
mode:
authorcel <cel@f/6sQ6d2CMxRUhLpspgGIulDxDCwYD7DzFzPNr7u5AU=.ed25519>2017-12-25 12:42:41 -1000
committercel <cel@f/6sQ6d2CMxRUhLpspgGIulDxDCwYD7DzFzPNr7u5AU=.ed25519>2017-12-25 12:42:41 -1000
commit399d0a666d1f8d2956c81279a98bed3c483dea51 (patch)
treecbedd0297e34738c6f7243324712b655250a4758 /lib/serve.js
parentb48b730900193fd19ce40192f0252593efa12f95 (diff)
downloadpatchfoo-399d0a666d1f8d2956c81279a98bed3c483dea51.tar.gz
patchfoo-399d0a666d1f8d2956c81279a98bed3c483dea51.zip
Allow using ooo (out-of-order message replication)
Diffstat (limited to 'lib/serve.js')
-rw-r--r--lib/serve.js55
1 files changed, 33 insertions, 22 deletions
diff --git a/lib/serve.js b/lib/serve.js
index 73e209c..b688f72 100644
--- a/lib/serve.js
+++ b/lib/serve.js
@@ -259,6 +259,8 @@ Serve.prototype.publish = function (content, cb) {
Serve.prototype.handle = function () {
var m = urlIdRegex.exec(this.req.url)
this.query = m[5] ? qs.parse(m[5]) : {}
+ this.useOoo = this.query.ooo != null ?
+ Boolean(this.query.ooo) : this.app.useOoo
switch (m[2]) {
case '%25': m[2] = '%'; m[1] = decodeURIComponent(m[1])
case '%': return this.id(m[1], m[3])
@@ -955,7 +957,7 @@ Serve.prototype.links = function (path) {
Serve.prototype.rawId = function (id) {
var self = this
- self.app.getMsgDecrypted(id, function (err, msg) {
+ self.getMsgDecryptedMaybeOoo(id, function (err, msg) {
if (err) return pull(
pull.once(u.renderError(err).outerHTML),
self.respondSink(400, {'Content-Type': ctype('html')})
@@ -1003,12 +1005,11 @@ function threadHeads(msgs, rootId) {
}))
}
-
Serve.prototype.id = function (id, path) {
var self = this
if (self.query.raw != null) return self.rawId(id)
- this.app.getMsgDecrypted(id, function (err, rootMsg) {
+ this.getMsgDecryptedMaybeOoo(id, function (err, rootMsg) {
if (err && err.name === 'NotFoundError') err = null, rootMsg = {
key: id, value: {content: false}}
if (err) return self.respond(500, err.stack || err)
@@ -1029,26 +1030,31 @@ Serve.prototype.id = function (id, path) {
if (!channel && c.channel) channel = c.channel
}),
pull.collect(function (err, links) {
- if (err) return self.respond(500, err.stack || err)
- pull(
- pull.values(sort(links)),
- self.renderThread({
- msgId: id,
- }),
- self.wrapMessages(),
- self.wrapThread({
- recps: recps,
- root: threadRootId,
- post: id,
- branches: threadHeads(links, threadRootId),
- postBranches: threadRootId !== id && threadHeads(links, id),
- channel: channel,
- }),
- self.wrapPage(id),
- self.respondSink(200)
- )
+ if (err) return gotLinks(err)
+ if (!self.useOoo) return gotLinks(null, links)
+ self.app.expandOoo({msgs: links, dest: id}, gotLinks)
})
)
+ function gotLinks(err, links) {
+ if (err) return self.respond(500, err.stack || err)
+ pull(
+ pull.values(sort(links)),
+ self.renderThread({
+ msgId: id,
+ }),
+ self.wrapMessages(),
+ self.wrapThread({
+ recps: recps,
+ root: threadRootId,
+ post: id,
+ branches: threadHeads(links, threadRootId),
+ postBranches: threadRootId !== id && threadHeads(links, id),
+ channel: channel,
+ }),
+ self.wrapPage(id),
+ self.respondSink(200)
+ )
+ }
})
}
@@ -1955,7 +1961,7 @@ Serve.prototype.gitBlob = function (rev) {
self.respondSink(400)
)
- self.app.getMsgDecrypted(self.query.msg, function (err, msg) {
+ self.getMsgDecryptedMaybeOoo(self.query.msg, function (err, msg) {
if (err) return pull(
pull.once(u.renderError(err).outerHTML),
self.wrapPage('git object ' + rev),
@@ -2769,6 +2775,11 @@ Serve.prototype.getBuiltinEmojiLink = function (name) {
}
}
+Serve.prototype.getMsgDecryptedMaybeOoo = function (key, cb) {
+ if (this.useOoo) this.app.getMsgDecryptedOoo(key, cb)
+ else this.app.getMsgDecrypted(key, cb)
+}
+
Serve.prototype.emojis = function (path) {
var self = this
var seen = {}