changed to handle 404 during download, also removing progress listener once percent completion is 100 to avoid manipulating DOM twice

This commit is contained in:
Abhinav Adduri 2017-06-02 14:11:54 -07:00
parent 028b6400cb
commit f80c0b5b1d
2 changed files with 16 additions and 2 deletions

View File

@ -15,6 +15,8 @@ let download = () => {
progress.innerText = `Progress: ${percentComplete}%`;
if (percentComplete === 100) {
fileReceiver.removeAllListeners('progress');
let finished = document.createElement('p');
finished.innerText = 'Your download has finished.';
li.appendChild(finished);
@ -28,7 +30,13 @@ let download = () => {
}
});
fileReceiver.download().then(([decrypted, fname]) => {
fileReceiver.download()
.catch((err) => {
console.log('The file has expired, or has already been deleted.');
document.getElementById('downloaded_files').removeChild(li);
return;
})
.then(([decrypted, fname]) => {
name.innerText = fname;
let dataView = new DataView(decrypted);
let blob = new Blob([dataView]);

View File

@ -20,6 +20,11 @@ class FileReceiver extends EventEmitter {
};
xhr.onload = function(e) {
if (xhr.status === 404) {
reject(new Error('The file has expired, or has already been deleted.'));
}
let blob = new Blob([this.response]);
let fileReader = new FileReader();
fileReader.onload = function() {
@ -52,7 +57,8 @@ class FileReceiver extends EventEmitter {
true,
['encrypt', 'decrypt']
)
]).then(([fdata, key]) => {
])
.then(([fdata, key]) => {
let salt = this.salt;
return Promise.all([
window.crypto.subtle.decrypt(