diff --git a/bin/resources/app/renderer.js b/bin/resources/app/renderer.js index 77c2a6d..181f60c 100644 --- a/bin/resources/app/renderer.js +++ b/bin/resources/app/renderer.js @@ -190,20 +190,46 @@ function getDirectoryContents(contentClass, directory) { let options = { withFileTypes: true } - fs.readdir(directory, { withFileTypes: true }, function (err, files) { + scanDirStream(directory) +} - if (err) { - return console.log('Unable to scan directory: ' + err); - } +function processFolderListing(file, type) { + var res = file.split('\r\n') + var fileList = '' + var itemsProcessed = 0; - files.forEach( (file) => { - if (file.isFile()) { - document.getElementsByClassName(contentClass)[activeTabIndex].innerHTML += `
  • ${file.name}
  • ` - } - else if (file.isDirectory() && !['$', '.'].includes(file.name.charAt(0))) { - document.getElementsByClassName(contentClass)[activeTabIndex].innerHTML += `
  • ${file.name}
  • ` - } + res.forEach( (element) => { - }); + if (element.length !== 0) { + if (type === 'file') { + fileList += `
  • ${element}
  • ` + } + else if (!['$', '.'].includes(element.charAt(0))) { + fileList += `
  • ${element}
  • ` + } + } + + itemsProcessed++; + + if(itemsProcessed === res.length) { + document.getElementsByClassName(contentClass)[activeTabIndex].innerHTML += fileList + } }); +} + +function scanDirStream(needle) { + return new Promise((resolve, reject) => { + + var dirListing = exec('dir /B /A:D ' + needle) + + var fileListing = exec('dir /B /A:-D ' + needle) + + dirListing.stdout.on('data', _data => { + processFolderListing(_data, 'directory') + }); + + fileListing.stdout.on('data', _data => { + processFolderListing(_data, 'file') + }); + }) } \ No newline at end of file diff --git a/renderer.js b/renderer.js index 77c2a6d..181f60c 100644 --- a/renderer.js +++ b/renderer.js @@ -190,20 +190,46 @@ function getDirectoryContents(contentClass, directory) { let options = { withFileTypes: true } - fs.readdir(directory, { withFileTypes: true }, function (err, files) { + scanDirStream(directory) +} - if (err) { - return console.log('Unable to scan directory: ' + err); - } +function processFolderListing(file, type) { + var res = file.split('\r\n') + var fileList = '' + var itemsProcessed = 0; - files.forEach( (file) => { - if (file.isFile()) { - document.getElementsByClassName(contentClass)[activeTabIndex].innerHTML += `
  • ${file.name}
  • ` - } - else if (file.isDirectory() && !['$', '.'].includes(file.name.charAt(0))) { - document.getElementsByClassName(contentClass)[activeTabIndex].innerHTML += `
  • ${file.name}
  • ` - } + res.forEach( (element) => { - }); + if (element.length !== 0) { + if (type === 'file') { + fileList += `
  • ${element}
  • ` + } + else if (!['$', '.'].includes(element.charAt(0))) { + fileList += `
  • ${element}
  • ` + } + } + + itemsProcessed++; + + if(itemsProcessed === res.length) { + document.getElementsByClassName(contentClass)[activeTabIndex].innerHTML += fileList + } }); +} + +function scanDirStream(needle) { + return new Promise((resolve, reject) => { + + var dirListing = exec('dir /B /A:D ' + needle) + + var fileListing = exec('dir /B /A:-D ' + needle) + + dirListing.stdout.on('data', _data => { + processFolderListing(_data, 'directory') + }); + + fileListing.stdout.on('data', _data => { + processFolderListing(_data, 'file') + }); + }) } \ No newline at end of file