Merge pull request #2249 from mikiher/watcher-update-api

Add API to update a path on a watched library folder
This commit is contained in:
advplyr 2023-10-26 16:45:26 -05:00 committed by GitHub
commit 5c1c511718
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 0 deletions

View File

@ -527,6 +527,54 @@ class MiscController {
}) })
} }
/**
* POST: /api/watcher/update
* Update a watch path
* Req.body { libraryId, path, type, [oldPath] }
* type = add, unlink, rename
* oldPath = required only for rename
* @this import('../routers/ApiRouter')
*
* @param {import('express').Request} req
* @param {import('express').Response} res
*/
updateWatchedPath(req, res) {
if (!req.user.isAdminOrUp) {
Logger.error(`[MiscController] Non-admin user attempted to updateWatchedPath`)
return res.sendStatus(404)
}
const libraryId = req.body.libraryId
const path = req.body.path
const type = req.body.type
if (!libraryId || !path || !type) {
Logger.error(`[MiscController] Invalid request body for updateWatchedPath. libraryId: "${libraryId}", path: "${path}", type: "${type}"`)
return res.sendStatus(400)
}
switch (type) {
case 'add':
this.watcher.onFileAdded(libraryId, path)
break;
case 'unlink':
this.watcher.onFileRemoved(libraryId, path)
break;
case 'rename':
const oldPath = req.body.oldPath
if (!oldPath) {
Logger.error(`[MiscController] Invalid request body for updateWatchedPath. oldPath is required for rename.`)
return res.sendStatus(400)
}
this.watcher.onFileRename(libraryId, oldPath, path)
break;
default:
Logger.error(`[MiscController] Invalid type for updateWatchedPath. type: "${type}"`)
return res.sendStatus(400)
}
res.sendStatus(200)
}
validateCronExpression(req, res) { validateCronExpression(req, res) {
const expression = req.body.expression const expression = req.body.expression
if (!expression) { if (!expression) {

View File

@ -39,6 +39,7 @@ class ApiRouter {
this.playbackSessionManager = Server.playbackSessionManager this.playbackSessionManager = Server.playbackSessionManager
this.abMergeManager = Server.abMergeManager this.abMergeManager = Server.abMergeManager
this.backupManager = Server.backupManager this.backupManager = Server.backupManager
/** @type {import('../Watcher')} */
this.watcher = Server.watcher this.watcher = Server.watcher
this.podcastManager = Server.podcastManager this.podcastManager = Server.podcastManager
this.audioMetadataManager = Server.audioMetadataManager this.audioMetadataManager = Server.audioMetadataManager
@ -308,6 +309,7 @@ class ApiRouter {
this.router.post('/genres/rename', MiscController.renameGenre.bind(this)) this.router.post('/genres/rename', MiscController.renameGenre.bind(this))
this.router.delete('/genres/:genre', MiscController.deleteGenre.bind(this)) this.router.delete('/genres/:genre', MiscController.deleteGenre.bind(this))
this.router.post('/validate-cron', MiscController.validateCronExpression.bind(this)) this.router.post('/validate-cron', MiscController.validateCronExpression.bind(this))
this.router.post('/watcher/update', MiscController.updateWatchedPath.bind(this))
} }
async getDirectories(dir, relpath, excludedDirs, level = 0) { async getDirectories(dir, relpath, excludedDirs, level = 0) {