From df6d26a066936cdcc9987feecd051541522d459a Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 15 Feb 2020 12:34:28 +0000 Subject: [PATCH] Make fs.read compatible with filecache Former-commit-id: 38f9dc7c7f825a77969ad55d7c4d25e4dc1aef22 [formerly a2c490caa3e19bab560b1f231b9985a881f170e9] Former-commit-id: dd3ec30dc2ed7ce373eb2c2dcb3bb7f0629de83e --- www/index.html | 7 +++---- www/js/lib/filecache.js | 35 +++++++++++++++++++++++++++-------- www/js/lib/util.js | 34 +++++++++++++++++----------------- 3 files changed, 47 insertions(+), 29 deletions(-) diff --git a/www/index.html b/www/index.html index cae01e34..87656f30 100644 --- a/www/index.html +++ b/www/index.html @@ -55,10 +55,9 @@ window.requireNode = window.require; window.require = undefined; window.fs = requireNode('fs'); - } - // Try to activate Service Worker - console.log('Trying to activate Service Worker...'); - if ("serviceWorker" in navigator) { + } else if ("serviceWorker" in navigator) { + // Try to activate Service Worker + console.log('Trying to activate Service Worker...'); // Register the service worker navigator.serviceWorker.register("../pwabuilder-sw.js", { scope: "../" diff --git a/www/js/lib/filecache.js b/www/js/lib/filecache.js index d701ce2f..9c310efa 100644 --- a/www/js/lib/filecache.js +++ b/www/js/lib/filecache.js @@ -156,14 +156,33 @@ define(['q'], function(Q) { }; var readInternal = function(file, begin, end) { return Q.Promise(function(resolve, reject) { - var reader = new FileReader(); - reader.readAsArrayBuffer(file.slice(begin, end)); - reader.onload = function(e) { - resolve(new Uint8Array(e.target.result)); - }; - reader.onerror = reader.onabort = function(e) { - reject(e); - }; + 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) { + console.error('Could not find file!', err); + reject(err); + } else { + var size = end - begin; + fs.read(fd, Buffer.alloc(size), 0, size, begin, function (err, bytesRead, data) { + if (err) reject(err); + else resolve(data); + fs.close(fd, function (err) { + if (err) console.log('Could not close file...', err); + }); + }); + } + }); + } else { + var reader = new FileReader(); + reader.readAsArrayBuffer(file.slice(begin, end)); + reader.onload = function(e) { + resolve(new Uint8Array(e.target.result)); + }; + reader.onerror = reader.onabort = function(e) { + reject(e); + }; + } }); }; diff --git a/www/js/lib/util.js b/www/js/lib/util.js index 5e3a1666..2709c6f3 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -212,22 +212,22 @@ define(['q', 'filecache'], function(q, FileCache) { */ function readFileSlice(file, begin, size) { // var deferred = q.defer(); - 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) { - console.error('Could not find file!', err); - } else { - fs.read(fd, new Uint8Array(size), 0, size, begin, function (err, bytesRead, data) { - if (err) deferred.reject(err); - else deferred.resolve(data); - fs.close(fd, function (err) { - if (err) console.log('Could not close file...', err); - }); - }); - } - }); - } else { + // 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) { + // console.error('Could not find file!', err); + // } else { + // fs.read(fd, Buffer.alloc(size), 0, size, begin, function (err, bytesRead, data) { + // if (err) deferred.reject(err); + // else deferred.resolve(data); + // fs.close(fd, function (err) { + // if (err) console.log('Could not close file...', err); + // }); + // }); + // } + // }); + // } else { // We are reading a picked file, so use vanilla JS methods // var reader = new FileReader(); // reader.onload = function (e) { @@ -240,7 +240,7 @@ define(['q', 'filecache'], function(q, FileCache) { // } // return deferred.promise; return FileCache.read(file, begin, begin + size); - } + // } } /**