aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/app.js11
-rw-r--r--lib/serve.js12
2 files changed, 15 insertions, 8 deletions
diff --git a/lib/app.js b/lib/app.js
index d86b4b9..b9e1924 100644
--- a/lib/app.js
+++ b/lib/app.js
@@ -172,6 +172,17 @@ App.prototype.publish = function (content, cb) {
tryPublish(2)
}
+App.prototype.wantSizeBlob = function (id, cb) {
+ var blobs = this.sbot.blobs
+ blobs.size(id, function (err, size) {
+ if (size != null) return cb(null, size)
+ blobs.want(id, function (err) {
+ if (err) return cb(err)
+ blobs.size(id, cb)
+ })
+ })
+}
+
App.prototype.addBlob = function (cb) {
var done = multicb({pluck: 1, spread: true})
var hashCb = done()
diff --git a/lib/serve.js b/lib/serve.js
index 59a09d5..1fe9b37 100644
--- a/lib/serve.js
+++ b/lib/serve.js
@@ -947,22 +947,18 @@ Serve.prototype.blob = function (id) {
var self = this
var blobs = self.app.sbot.blobs
if (self.req.headers['if-none-match'] === id) return self.respond(304)
- var done = multicb({pluck: 1, spread: true})
- blobs.want(id, function (err, has) {
+ self.app.wantSizeBlob(id, function (err, size) {
if (err) {
if (/^invalid/.test(err.message)) return self.respond(400, err.message)
else return self.respond(500, err.message || err)
}
- if (!has) return self.respond(404, 'Not found')
- blobs.size(id, done())
pull(
blobs.get(id),
pull.map(Buffer),
- ident(done().bind(self, null)),
+ ident(gotType),
self.respondSink()
)
- done(function (err, size, type) {
- if (err) console.trace(err)
+ function gotType(type) {
type = type && mime.lookup(type)
if (type) self.res.setHeader('Content-Type', type)
if (typeof size === 'number') self.res.setHeader('Content-Length', size)
@@ -971,7 +967,7 @@ Serve.prototype.blob = function (id) {
self.res.setHeader('Cache-Control', 'public, max-age=315360000')
self.res.setHeader('etag', id)
self.res.writeHead(200)
- })
+ }
})
}