From 421dd30c9d0bf7b1b886db1788ad6e6227bda728 Mon Sep 17 00:00:00 2001 From: Daniela Arcese Date: Thu, 29 Jun 2017 16:08:57 -0700 Subject: [PATCH] remove expired uploads --- frontend/src/upload.js | 64 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/frontend/src/upload.js b/frontend/src/upload.js index 6d902b0d..b957ff82 100644 --- a/frontend/src/upload.js +++ b/frontend/src/upload.js @@ -15,7 +15,8 @@ $(document).ready(function() { for (let i = 0; i < localStorage.length; i++) { const id = localStorage.key(i); - populateFileList(localStorage.getItem(id)); + //check if file exists before adding to list + checkExistence(id, true); } // copy link to clipboard @@ -54,6 +55,7 @@ $(document).ready(function() { } else { file = event.target.files[0]; } + let expiration = 24*60*60*1000; //will eventually come from a field const fileSender = new FileSender(file); fileSender.on('progress', percentComplete => { @@ -75,7 +77,9 @@ $(document).ready(function() { fileId: info.fileId, url: info.url, secretKey: info.secretKey, - deleteToken: info.deleteToken + deleteToken: info.deleteToken, + creationDate: new Date(), + expiry: expiration }; localStorage.setItem(info.fileId, JSON.stringify(fileData)); @@ -93,6 +97,23 @@ $(document).ready(function() { ev.preventDefault(); }; + function checkExistence(id, populate) { + const xhr = new XMLHttpRequest(); + xhr.onreadystatechange = () => { + if (xhr.readyState === XMLHttpRequest.DONE){ + if (xhr.status == 200) { + if (populate) { + populateFileList(localStorage.getItem(id)); + } + } else if (xhr.status == 404){ + localStorage.removeItem(id); + } + } + }; + xhr.open('get', '/exists/' + id, true); + xhr.send(); + } + //update file table with current files in localStorage function populateFileList(file) { try { @@ -117,7 +138,46 @@ $(document).ready(function() { // create delete button btn.innerHTML = 'x'; btn.classList.add('delete-btn'); + link.innerHTML = file.url.trim() + `#${file.secretKey}`.trim(); + //file.expiry = new Date(file.expiry); + file.creationDate = new Date(file.creationDate); + + let future = new Date(); + future.setTime(file.creationDate.getTime() + file.expiry); + + let countdown = 0; + countdown = future.getTime() - (new Date().getTime()); + let minutes = Math.floor(countdown/1000/60); + let hours = Math.floor(minutes/60); + let seconds = Math.floor((countdown/1000)%60); + + if (hours > 0) { + expiry.innerHTML = hours + 'h'; + window.setInterval(() => { + poll(); + expiry.innerHTML = hours + 'h'; + }, 3600000); + } else if (hours == 0){ + expiry.innerHTML = minutes + 'm' + seconds + 's'; + window.setInterval(() => { + poll(); + expiry.innerHTML = minutes + 'm' + seconds + 's'; + }, 1000); + } + + function poll() { + countdown = future.getTime() - (new Date().getTime()); + minutes = Math.floor(countdown/1000/60); + hours = Math.floor(minutes/60); + seconds = Math.floor((countdown/1000)%60); + + //remove from list when expired + if (hours == 0 && minutes == 0 && seconds == 0){ + localStorage.removeItem(file.fileId); + $(expiry).parents('tr').remove(); + } + } // create popup popupDiv.classList.add('popup');