From 509ee610c2b922d30a14f0bb08f1f0c4464a5f99 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 1 Mar 2020 10:59:42 +0000 Subject: [PATCH] Add new Blob.arrayBuffer method Former-commit-id: bdb97550a8558a6e0364a10db061aa8cdff5075b [formerly d3df633a0bbe50087aad6cf234887f76c6a8fa79] Former-commit-id: 28155de28dffa940acceb866b203d6b143501374 --- www/js/lib/filecache.js | 60 ++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/www/js/lib/filecache.js b/www/js/lib/filecache.js index 9a9cbe98..c12df56f 100644 --- a/www/js/lib/filecache.js +++ b/www/js/lib/filecache.js @@ -154,35 +154,41 @@ define(['q'], function(Q) { return result; }); }; - var readInternal = function(file, begin, end) { - return Q.Promise(function(resolve, reject) { - if (file.readMode === 'electron') { - // We are reading a packaged file and have to use Electron fs.read (so we don't have to pick the file) - fs.open(file.path, 'r', function (err, fd) { - if (err) { - reject(err); - } else { - var size = end - begin; - var arr = typeof Buffer !== 'undefined' && Buffer.alloc(size) || new Uint8Array(size); - fs.read(fd, arr, 0, size, begin, function (err, bytesRead, data) { - if (err) reject(err); - fs.close(fd, function (err) { + var readInternal = function (file, begin, end) { + if ('arrayBuffer' in Blob.prototype && file.readMode !== 'electron') { + return file.slice(begin, end).arrayBuffer().then(function (buffer) { + return new Uint8Array(buffer); + }); + } else { + return Q.Promise(function (resolve, reject) { + if (file.readMode === 'electron') { + // We are reading a packaged file and have to use Electron fs.read (so we don't have to pick the file) + fs.open(file.path, 'r', function (err, fd) { + if (err) { + reject(err); + } else { + var size = end - begin; + var arr = typeof Buffer !== 'undefined' && Buffer.alloc(size) || new Uint8Array(size); + fs.read(fd, arr, 0, size, begin, function (err, bytesRead, data) { if (err) reject(err); - else return resolve(data); + fs.close(fd, function (err) { + if (err) reject(err); + else return resolve(data); + }); }); - }); - } - }); - } else { - var reader = new FileReader(); - reader.readAsArrayBuffer(file.slice(begin, end)); - reader.addEventListener('load', function(e) { - resolve(new Uint8Array(e.target.result)); - }); - reader.addEventListener('error', reject); - reader.addEventListener('abort', reject); - } - }); + } + }); + } else { + var reader = new FileReader(); + reader.readAsArrayBuffer(file.slice(begin, end)); + reader.addEventListener('load', function (e) { + resolve(new Uint8Array(e.target.result)); + }); + reader.addEventListener('error', reject); + reader.addEventListener('abort', reject); + } + }); + } }; return {