update file explorer code

This commit is contained in:
IrosTheBeggar 2020-12-03 12:51:53 -05:00
parent c695f60308
commit 03c13848c9
2 changed files with 23 additions and 10 deletions

View File

@ -1,3 +1,4 @@
const path = require('path');
const Joi = require('joi');
const fileExplorer = require('../util/file-explorer');
@ -5,7 +6,10 @@ exports.setup = (mstream, program) => {
// The admin file explorer can view the entire system
mstream.post("/api/v1/admin/file-explorer", async (req, res) => {
try {
const schema = Joi.object({ directory: Joi.string().required() });
const schema = Joi.object({
directory: Joi.string().required(),
joinDirectory: Joi.string().optional()
});
await schema.validateAsync(req.body);
}catch (err) {
return res.status(500).json({ error: 'Validation Error' });
@ -13,15 +17,24 @@ exports.setup = (mstream, program) => {
try {
// Handle home directory
if(req.body.directory === '~') {
req.body.directory = require('os').homedir();
let thisDirectory = req.body.directory;
if (req.body.directory === '~') {
thisDirectory = require('os').homedir();
}
const folderContents = await fileExplorer.getDirectoryContents(pathInfo.fullPath, program.supportedAudioFiles);
res.json({ path: returnDirectory, directories: folderContents.directories, files: folderContents.files });
if (req.body.joinDirectory) {
thisDirectory = path.join(thisDirectory, req.body.joinDirectory);
}
const folderContents = await fileExplorer.getDirectoryContents(thisDirectory, {});
res.json({
path: thisDirectory,
directories: folderContents.directories,
files: folderContents.files
});
}catch (err) {
return res.status(500).json({ error: 'Validation Error' });
return res.status(500).json({ error: 'Failed to get directory contents' });
}
});
}

View File

@ -8,11 +8,11 @@ function getFileType(pathString) {
exports.getDirectoryContents = async (directory, fileTypeFilter) => {
try {
const rt = { directories: [], files: [] };
for (const file of await fs.readdir(directory)) {
try {
var stat = await fs.stat(path.join(directory, file));
} catch (e) { return; /* Bad file, ignore and continue */ }
} catch (e) { continue; } /* Bad file or permission error, ignore and continue */
// Handle Directory
if (stat.isDirectory()) {
rt.directories.push({ name: file });
@ -35,6 +35,6 @@ exports.getDirectoryContents = async (directory, fileTypeFilter) => {
return rt;
} catch (err) {
throw 'Failed to get directory contents';
throw err;
}
}