diff --git a/server/controllers/ToolsController.js b/server/controllers/ToolsController.js index 9f2014ec..767d5e46 100644 --- a/server/controllers/ToolsController.js +++ b/server/controllers/ToolsController.js @@ -150,6 +150,27 @@ class ToolsController { res.sendStatus(200) } + /** + * POST: /api/tools/batch/update-metadata-files + * Start batch request to update all metadata files + * + * @this import('../routers/ApiRouter') + * + * @param {RequestWithUser} req + * @param {Response} res + */ + async updateAllItemMetadata(req, res) { + if (!req.user.isAdminOrUp) { + Logger.warn(`Non-admin user "${req.user.username}" other than admin attempted to batch scan library items`) + return res.sendStatus(403) + } + + const libraryItems = await Database.libraryItemModel.findAll() + for (const libraryItem of libraryItems) await libraryItem.saveMetadataFile() + + res.sendStatus(200) + } + /** * * @param {RequestWithUser} req diff --git a/server/routers/ApiRouter.js b/server/routers/ApiRouter.js index db04bf5e..2ddbcf42 100644 --- a/server/routers/ApiRouter.js +++ b/server/routers/ApiRouter.js @@ -298,6 +298,7 @@ class ApiRouter { this.router.delete('/tools/item/:id/encode-m4b', ToolsController.middleware.bind(this), ToolsController.cancelM4bEncode.bind(this)) this.router.post('/tools/item/:id/embed-metadata', ToolsController.middleware.bind(this), ToolsController.embedAudioFileMetadata.bind(this)) this.router.post('/tools/batch/embed-metadata', ToolsController.middleware.bind(this), ToolsController.batchEmbedMetadata.bind(this)) + this.router.post('/tools/batch/update-metadata-files', ToolsController.middleware.bind(this), ToolsController.updateAllItemMetadata.bind(this)) // // RSS Feed Routes (Admin and up)