const { ipcRenderer } = require('electron'); var isFinding = false; async function selectFolder() { try { const dir = await ipcRenderer.invoke('selectDirectory', {}); if(!dir) return; console.log(dir); document.getElementById("lblFolder").value = dir; saveState(); } catch(err) {console.log(err)} } async function find() { try { if(isFinding) return; // evita clicar novamente enquanto ainda esta processando let list = document.getElementById("list").value; let listExclude = document.getElementById("listExclude").value; let dir = document.getElementById("lblFolder").value; if(!dir) return; if(!list) return; isFinding = true; document.getElementById('cnt2').innerText = ""; document.getElementById("copyBar").value = 0; document.getElementById("btnFind").classList.add("button--loading"); document.getElementById("listFound").value = ""; await new Promise(resolve => setTimeout(resolve, 300)); let tokens = list.replace(/\r\n/g,"\n").split("\n"); tokens = tokens.filter(n => `${n}`); tokens = arraySortDistinct(tokens); let tokensExclude = listExclude.replace(/\r\n/g,"\n").split("\n"); tokensExclude = tokensExclude.filter(n => `${n}`); tokensExclude = arraySortDistinct(tokensExclude); let allFiles = await ipcRenderer.invoke('listFiles', dir); allFiles = allFiles.filter(n => `${n}`); allFiles = arraySortDistinct(allFiles); let found = []; for (let f = 0; f < allFiles.length; f++) { let fileName = allFiles[f]; //.toLowerCase(); fileName = fileName.replace(/^.*[\\/]/, ''); // remove o fullpath deixando apenas o nome do arquivo; fileName = removeAcentos(fileName); let match1 = false; let match2 = false; for (let t = 0; t < tokens.length; t++) { let fnd = tokens[t]; //.toLowerCase(); fnd = removeAcentos(fnd); //if( fileName.includes(fnd) ) {found.push(allFiles[f]);break;}; // quebra o segundo for if(matchWildCard(fileName,fnd)) {match1 = true;break;}; } for (let t = 0; t < tokensExclude.length; t++) { let fnd = tokensExclude[t]; //.toLowerCase(); fnd = removeAcentos(fnd); if(matchWildCard(fileName,fnd)) {match2 = true;break;}; } if(match1 && !match2) found.push(allFiles[f]); } found = arraySortDistinct(found); let txt = found.join("\n"); document.getElementById("listFound").value = txt; document.getElementById('cnt2').innerText = found.length + " of " + allFiles.length; document.getElementById("btnFind").classList.remove("button--loading"); isFinding = false; } catch(err) {console.log(err)} } async function copy() { try { let list = document.getElementById("listFound").value; if(!list) return; let files = list.replace(/\r\n/g,"\n").split("\n"); let bar = document.getElementById("copyBar"); bar.value = 0; bar.max = files.length; for(let f = 0; f < files.length; f++) { let file = files[f]; bar.value = f; bar.dataset.label = `${f}/${files.length}`; await ipcRenderer.invoke('copyFile', file); } bar.value = bar.max; bar.dataset.label = `${bar.max}/${bar.max}`; } catch(err) {console.log(err)} } function countLines(obj,lbl) { let arr = obj.value; arr = arr.replace(/\r\n/g,"\n").split("\n"); arr = arr.filter(n => `${n}`); let cnt = arr.length; document.getElementById(lbl).innerText = cnt + " items"; } async function init() { let out = await ipcRenderer.invoke('getOutputFolder', {}); document.getElementById("lblOutputFolder").value = out; restoreState(); } function arraySortDistinct(a) { return a.sort().filter(function(item, pos, ary) { return !pos || item != ary[pos - 1]; }); } /* function matchWildCard(str, rule) { let escapeRegex = (str) => str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); return new RegExp("^" + rule.split("*").map(escapeRegex).join(".*") + "$").test(str); } */ function matchWildCard(str, wildcard) { let w = wildcard.replace(/[.+^${}()|[\]\\]/g, '\\$&'); // regexp escape const re = new RegExp(`^${w.replace(/\*/g,'.*').replace(/\?/g,'.')}$`,'i'); // case insensitive return re.test(str); // remove last 'i' above to have case sensitive } function removeAcentos( strTxt ) { return(strTxt.normalize("NFD").replace(/[\u0300-\u036f]/g, "")); } function saveState() { localStorage.setItem("list",document.getElementById("list").value); localStorage.setItem("listExclude",document.getElementById("listExclude").value); localStorage.setItem("lblFolder",document.getElementById("lblFolder").value); } function restoreState() { document.getElementById("list").value = localStorage.getItem("list") || ""; document.getElementById("listExclude").value = localStorage.getItem("listExclude") || ""; document.getElementById("lblFolder").value = localStorage.getItem("lblFolder") || ""; countLines(document.getElementById("list"),'cnt1'); }