aboutsummaryrefslogtreecommitdiff
path: root/src/client/util/request-image-size.js
diff options
context:
space:
mode:
authorSam Wilkins <samwilkins333@gmail.com>2019-07-10 17:40:02 -0400
committerSam Wilkins <samwilkins333@gmail.com>2019-07-10 17:40:02 -0400
commit6ca470c067c7620cd9da7d8b8c1d553ee46f5d1c (patch)
tree2a2d492e0c07b3a29cc36eb5b144787647410d5a /src/client/util/request-image-size.js
parent892608273cdfeba4cfb55c5c604bee4361b3be0e (diff)
parent2cd8ac79b4731ca98aafe8a92fa6fb132fe9e86f (diff)
merged with master and prototype initialization refactor, still in progress and deathly buggy
Diffstat (limited to 'src/client/util/request-image-size.js')
-rw-r--r--src/client/util/request-image-size.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/client/util/request-image-size.js b/src/client/util/request-image-size.js
new file mode 100644
index 000000000..27605d167
--- /dev/null
+++ b/src/client/util/request-image-size.js
@@ -0,0 +1,75 @@
+/**
+ * request-image-size: Detect image dimensions via request.
+ * Licensed under the MIT license.
+ *
+ * https://github.com/FdezRomero/request-image-size
+ * © 2017 Rodrigo Fernández Romero
+ *
+ * Based on the work of Johannes J. Schmidt
+ * https://github.com/jo/http-image-size
+ */
+
+const request = require('request');
+const imageSize = require('image-size');
+const HttpError = require('standard-http-error');
+
+module.exports = function requestImageSize(options) {
+ let opts = {
+ encoding: null
+ };
+
+ if (options && typeof options === 'object') {
+ opts = Object.assign(options, opts);
+ } else if (options && typeof options === 'string') {
+ opts = Object.assign({
+ uri: options
+ }, opts);
+ } else {
+ return Promise.reject(new Error('You should provide an URI string or a "request" options object.'));
+ }
+
+ opts.encoding = null;
+
+ return new Promise((resolve, reject) => {
+ const req = request(opts);
+
+ req.on('response', res => {
+ if (res.statusCode >= 400) {
+ return reject(new HttpError(res.statusCode, res.statusMessage));
+ }
+
+ let buffer = new Buffer([]);
+ let size;
+ let imageSizeError;
+
+ res.on('data', chunk => {
+ buffer = Buffer.concat([buffer, chunk]);
+
+ try {
+ size = imageSize(buffer);
+ } catch (err) {
+ imageSizeError = err;
+ return;
+ }
+
+ if (size) {
+ resolve(size);
+ return req.abort();
+ }
+ });
+
+ res.on('error', err => reject(err));
+
+ res.on('end', () => {
+ if (!size) {
+ return reject(imageSizeError);
+ }
+
+ size.downloaded = buffer.length;
+ return resolve(size);
+ });
+ });
+
+ req.on('error', err => reject(err));
+ });
+}; \ No newline at end of file