lib/serve.jsView |
---|
20 | 20 … | var htime = require('human-time') |
21 | 21 … | var ph = require('pull-hyperscript') |
22 | 22 … | var emojis = require('emoji-named-characters') |
23 | 23 … | var jpeg = require('jpeg-autorotate') |
| 24 … | +var concat = require('pull-concat') |
24 | 25 … | |
25 | 26 … | module.exports = Serve |
26 | 27 … | |
27 | 28 … | var emojiDir = path.join(require.resolve('emoji-named-characters'), '../pngs') |
955 | 956 … | else return self.respond(500, err.message || err) |
956 | 957 … | } |
957 | 958 … | if (!has) return self.respond(404, 'Not found') |
958 | 959 … | |
959 | | - blobs.size(id, done()) |
960 | | - var rotatedSize = null |
| 960 … | + var heresTheData = done() |
| 961 … | + var heresTheType = done().bind(self, null) |
961 | 962 … | |
962 | 963 … | pull( |
963 | 964 … | blobs.get(id), |
964 | 965 … | pull.map(Buffer), |
965 | | - pull.asyncMap(function (buf, cb) { |
966 | | - jpeg.rotate(buf, {}, function (err, buffer, orientation) { |
967 | | - if (err) return cb(null, buf) |
968 | | - rotatedSize = buffer.length |
969 | | - return cb(null, buffer) |
970 | | - }) |
971 | | - }), |
972 | | - ident(done().bind(self, null)), |
973 | | - self.respondSink() |
| 966 … | + ident(heresTheType), |
|
| 967 … | + concat.buffer(onFullBuffer) |
974 | 968 … | ) |
975 | | - done(function (err, size, type) { |
976 | | - if (err) console.trace(err) |
| 969 … | + |
| 970 … | + function onFullBuffer (err, buffer) { |
| 971 … | + if (err) return heresTheData(err) |
| 972 … | + |
| 973 … | + jpeg.rotate(buffer, {}, function (err, rotatedBuffer, orientation) { |
| 974 … | + if (!err) buffer = rotatedBuffer |
| 975 … | + |
| 976 … | + heresTheData(null, buffer) |
| 977 … | + pull( |
| 978 … | + pull.once(buffer), |
| 979 … | + self.respondSink() |
| 980 … | + ) |
| 981 … | + }) |
| 982 … | + } |
| 983 … | + |
| 984 … | + done(function (err, data, type) { |
| 985 … | + if (err) { |
| 986 … | + console.trace(err) |
| 987 … | + self.respond(500, err.message || err) |
| 988 … | + } |
977 | 989 … | type = type && mime.lookup(type) |
978 | 990 … | if (type) self.res.setHeader('Content-Type', type) |
979 | | - if (typeof size === 'number') self.res.setHeader('Content-Length', rotatedSize || size) |
| 991 … | + self.res.setHeader('Content-Length', data.length) |
980 | 992 … | if (self.query.name) self.res.setHeader('Content-Disposition', |
981 | 993 … | 'inline; filename='+encodeDispositionFilename(self.query.name)) |
982 | 994 … | self.res.setHeader('Cache-Control', 'public, max-age=315360000') |
983 | 995 … | self.res.setHeader('etag', id) |