From efdbdb04fe37320844d85b4ae8b2bfb7f00d226a Mon Sep 17 00:00:00 2001 From: WubzyGD Date: Tue, 14 Jun 2022 21:17:21 -0600 Subject: [PATCH] decompression --- scripts/contextmenu/decompress.js | 105 ++++++++++++++++++++++++++++++ scripts/fileview/load/render.js | 1 - 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 scripts/contextmenu/decompress.js diff --git a/scripts/contextmenu/decompress.js b/scripts/contextmenu/decompress.js new file mode 100644 index 0000000..d8167d7 --- /dev/null +++ b/scripts/contextmenu/decompress.js @@ -0,0 +1,105 @@ +const fs = require('fs'); +const path = require('path'); +const az = require('adm-zip'); +const Mousetrap = require('../dep/mousetrap'); + +const lightRefresh = require('../fileview/lightrefresh'); +const preModal = require('../modal/pre'); +const postModal = require('../modal/post'); +const showError = require('../modal/common/error'); +const clearModals = require('../modal/clearmodals'); +const newToast = require('../toast/createtoast'); +const refresh = require('../fileview/refresh'); + +module.exports = (event, pathToCompress) => { + if (!fs.existsSync(path.join(window.kade.cpath, window.kade.currentFolder))) { + return newToast("Decompression failed", "For some reason, that zip archive could not be found."); + } + let zip = new az(path.join(window.kade.cpath, window.kade.currentFolder)); + if (!pathToCompress) {pathToCompress = window.kade.currentFolder;} + if (window.kade.modal) {return;} + preModal('decompress-folder-modal-container'); + let modalOut = document.createElement('div'); + modalOut.className = 'modal'; + modalOut.id = 'decompress-folder-modal-container'; + document.body.appendChild(modalOut); + let modal = document.createElement('div'); + modal.className = 'modal-wrapper'; + modalOut.appendChild(modal); + let title = document.createElement('h2'); + title.innerHTML = 'Decompress Archive'; + modal.appendChild(title); + let text = document.createElement('p'); + text.innerHTML = "Please name the zip you'd like to decompress to."; + modal.appendChild(text); + let cont = document.createElement('div'); + cont.className = 'button-container'; + modal.appendChild(cont); + let input = document.createElement('input'); + input.placeholder = pathToCompress.split(/\\+|\/+/gm).reverse()[0]; + input.placeholder = input.placeholder.slice(0, input.placeholder.length - 4); + input.value = input.placeholder; + input.id = 'decompress-folder-input'; + let lastIn = ''; + input.oninput = () => { + if (!input.value.match(/^[a-zA-Z0-9-_() ]*$/gm)) {input.value = lastIn;} + else {lastIn = input.value;} + }; + cont.appendChild(input); + let conf = document.createElement('button'); + conf.innerHTML = 'Create'; + conf.onclick = () => { + try { + input.value = input.value.trim(); + if (!input.value.length) {return;} + if (fs.existsSync(path.join(window.kade.cpath, input.value))) { + if (!input.value.match(/^.+\(\d\)$/gm)) {input.value += ' (1)';} + else { + let tempstr = input.value.split(''); + tempstr[input.value.length - 2] = `${Number(input.value.charAt(input.value.length - 2)) + 1}`; + input.value = tempstr.join(''); + } + return; + } + input.style.display = 'none'; + conf.style.display = 'none'; + cont.style.display = 'none'; + closeWrap.style.display = 'none'; + title.innerHTML += " - In Progress..." + text.innerHTML = "Your arhive is being decompressed. Please wait a moment.

This may take some time..."; + let bar = document.createElement('div'); + bar.className = "loading-bar"; + modal.appendChild(bar); + zip.extractAllToAsync(path.join(window.kade.cpath, input.value), undefined, undefined, () => { + newToast("Archive decompressed", [`The current folder was decompressed into "${input.value}" successfully`, `${window.kade.cpath}/${input.value}`], undefined, false, 5, () => refresh(`${window.kade.cpath}/${input.value}`)); + lightRefresh(); + modalOut.remove(); + postModal(modalOut.id); + }); + } catch { + newToast("Archive not Decompressed", "An error caused that folder to not be decompressed.", "#b24355", false, 5, () => {showError("Folder Creation", "There was an unknown error while trying to decompress that folder. It may be a permissions issue, or the host folder doesn't exist anymore.");}); + clearModals(); + postModal(modalOut.id); + } + }; + cont.appendChild(conf); + input.focus(); + let msm = new Mousetrap(modal); + msm.bind('esc', () => { + lightRefresh(); + modalOut.remove(); + postModal(modalOut.id); + }); + msm.bind('enter', () => {conf.click();}); + let close = document.createElement('a'); + close.className = 'close-button'; + close.onclick = () => { + lightRefresh(); + modalOut.remove(); + postModal(modalOut.id); + }; + let closeWrap = document.createElement('div'); + closeWrap.className = 'close-button-wrapper'; + modal.appendChild(closeWrap); + closeWrap.appendChild(close); +}; \ No newline at end of file diff --git a/scripts/fileview/load/render.js b/scripts/fileview/load/render.js index f2f50ac..1ddcb4f 100755 --- a/scripts/fileview/load/render.js +++ b/scripts/fileview/load/render.js @@ -19,7 +19,6 @@ module.exports = (dir, options) => { if (options.animate) {cfc.classList.add('rise');} if (file.dir) {cfc.classList.add('folder');} if (!file.dir && path.extname(path.join(window.kade.cpath, file.trueName)) === '.zip') {cfc.classList.add('zip');} - console.log(path.extname(path.join(window.kade.cpath, file.trueName))); cfc.onclick = function () { window.kade.elc = true; if (cfc.classList.contains('file-active')) {