diff --git a/src/api/admin.js b/src/api/admin.js index d0bdbec..cc9106c 100644 --- a/src/api/admin.js +++ b/src/api/admin.js @@ -164,11 +164,17 @@ exports.setup = (mstream) => { const schema = Joi.object({ directory: Joi.string().required(), vpath: Joi.string().pattern(/[a-zA-Z0-9-]+/).required(), - autoAccess: Joi.boolean().default(false) + autoAccess: Joi.boolean().default(false), + isAudioBooks: Joi.boolean().default(false) }); const input = joiValidate(schema, req.body); - await admin.addDirectory(input.value.directory, input.value.vpath, input.value.autoAccess, mstream); + await admin.addDirectory( + input.value.directory, + input.value.vpath, + input.value.autoAccess, + input.value.isAudioBooks, + mstream); res.json({}); try { diff --git a/src/api/playlist.js b/src/api/playlist.js index 28617a4..6fbc8ef 100644 --- a/src/api/playlist.js +++ b/src/api/playlist.js @@ -15,11 +15,22 @@ exports.setup = (mstream) => { } } - res.json({ + const returnThis = { vpaths: req.user.vpaths, playlists: getPlaylists(req.user.username), - transcode + transcode, + vpathMetaData: {} + }; + + req.user.vpaths.forEach(p => { + if (config.program.folders[p]) { + returnThis.vpathMetaData[p] = { + type: config.program.folders[p].type + }; + } }); + + res.json(returnThis); }); mstream.post('/api/v1/playlist/delete', (req, res) => { diff --git a/src/state/config.js b/src/state/config.js index 2a0131a..4f3bf72 100644 --- a/src/state/config.js +++ b/src/state/config.js @@ -79,7 +79,7 @@ const schema = Joi.object({ Joi.string(), Joi.object({ root: Joi.string().required(), - type: Joi.string().valid('music', 'audiobook').default('music'), + type: Joi.string().valid('music', 'audio-books').default('music'), }) ).default({}), users: Joi.object().pattern( diff --git a/src/util/admin.js b/src/util/admin.js index ad35717..e6e3c58 100644 --- a/src/util/admin.js +++ b/src/util/admin.js @@ -18,7 +18,7 @@ exports.saveFile = async (saveData, file) => { return await fs.writeFile(file, JSON.stringify(saveData, null, 2), 'utf8') } -exports.addDirectory = async (directory, vpath, autoAccess, mstream) => { +exports.addDirectory = async (directory, vpath, autoAccess, isAudioBooks, mstream) => { // confirm directory is real const stat = await fs.stat(directory); if (!stat.isDirectory()) { throw `${directory} is not a directory` }; @@ -30,6 +30,7 @@ exports.addDirectory = async (directory, vpath, autoAccess, mstream) => { // Once the file save is complete, the new user will be added const memClone = JSON.parse(JSON.stringify(config.program.folders)); memClone[vpath] = { root: directory }; + if (isAudioBooks) { memClone[vpath].type = 'audio-books'; } // add directory to config file const loadConfig = await this.loadFile(config.configFile); @@ -44,7 +45,7 @@ exports.addDirectory = async (directory, vpath, autoAccess, mstream) => { await this.saveFile(loadConfig, config.configFile); // add directory to program - config.program.folders[vpath] = { root: directory }; + config.program.folders[vpath] = memClone; if (autoAccess === true) { Object.values(config.program.users).forEach(user => { diff --git a/webapp/admin/index.js b/webapp/admin/index.js index 4aaaf78..c91d89e 100644 --- a/webapp/admin/index.js +++ b/webapp/admin/index.js @@ -262,6 +262,10 @@ const foldersView = Vue.component('folders-view', { Give Access To All Users +