mirror of
https://github.com/IrosTheBeggar/mStream.git
synced 2025-10-27 07:31:02 +00:00
update file explorer code
This commit is contained in:
parent
c695f60308
commit
03c13848c9
@ -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' });
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user