mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-09-01 13:51:27 +02:00
create api endpoint and logic for updating user eReader devices
This commit is contained in:
parent
dbc04d5bb3
commit
43f3e5ee03
@ -394,6 +394,36 @@ class MeController {
|
|||||||
res.json(req.user.toOldJSONForBrowser())
|
res.json(req.user.toOldJSONForBrowser())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* POST: /api/me/ereader-devices
|
||||||
|
*
|
||||||
|
* @param {RequestWithUser} req
|
||||||
|
* @param {Response} res
|
||||||
|
*/
|
||||||
|
async updateUserEReaderDevices(req, res) {
|
||||||
|
if (!req.body.ereaderDevices || !Array.isArray(req.body.ereaderDevices)) {
|
||||||
|
return res.status(400).send('Invalid payload. ereaderDevices array required')
|
||||||
|
}
|
||||||
|
|
||||||
|
const ereaderDevices = req.body.ereaderDevices
|
||||||
|
for (const device of ereaderDevices) {
|
||||||
|
if (!device.name || !device.email) {
|
||||||
|
return res.status(400).send('Invalid payload. ereaderDevices array items must have name and email')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const updated = Database.emailSettings.updateUserEReaderDevices(req.user, ereaderDevices)
|
||||||
|
if (updated) {
|
||||||
|
await Database.updateSetting(Database.emailSettings)
|
||||||
|
SocketAuthority.clientEmitter('ereader-devices-updated', {
|
||||||
|
ereaderDevices: Database.emailSettings.ereaderDevices
|
||||||
|
})
|
||||||
|
}
|
||||||
|
res.json({
|
||||||
|
ereaderDevices: Database.emailSettings.getEReaderDevices(req.user)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GET: /api/me/stats/year/:year
|
* GET: /api/me/stats/year/:year
|
||||||
*
|
*
|
||||||
|
@ -174,5 +174,20 @@ class EmailSettings {
|
|||||||
getEReaderDevice(deviceName) {
|
getEReaderDevice(deviceName) {
|
||||||
return this.ereaderDevices.find((d) => d.name === deviceName)
|
return this.ereaderDevices.find((d) => d.name === deviceName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the ereader devices that belong to a specific user
|
||||||
|
*
|
||||||
|
* @param {import('../../models/User')} user
|
||||||
|
* @param {EreaderDeviceObject[]} userEReaderDevices
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
updateUserEReaderDevices(user, userEReaderDevices) {
|
||||||
|
// Filter to get all devices the user can't access separate
|
||||||
|
// then merge with the updated user devices
|
||||||
|
const otherDevices = this.ereaderDevices.filter((device) => !this.checkUserCanAccessDevice(device, user))
|
||||||
|
const ereaderDevices = otherDevices.concat(userEReaderDevices)
|
||||||
|
return this.update({ ereaderDevices })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
module.exports = EmailSettings
|
module.exports = EmailSettings
|
||||||
|
@ -190,6 +190,7 @@ class ApiRouter {
|
|||||||
this.router.get('/me/series/:id/remove-from-continue-listening', MeController.removeSeriesFromContinueListening.bind(this))
|
this.router.get('/me/series/:id/remove-from-continue-listening', MeController.removeSeriesFromContinueListening.bind(this))
|
||||||
this.router.get('/me/series/:id/readd-to-continue-listening', MeController.readdSeriesFromContinueListening.bind(this))
|
this.router.get('/me/series/:id/readd-to-continue-listening', MeController.readdSeriesFromContinueListening.bind(this))
|
||||||
this.router.get('/me/stats/year/:year', MeController.getStatsForYear.bind(this))
|
this.router.get('/me/stats/year/:year', MeController.getStatsForYear.bind(this))
|
||||||
|
this.router.post('/me/ereader-devices', MeController.updateUserEReaderDevices.bind(this))
|
||||||
|
|
||||||
//
|
//
|
||||||
// Backup Routes
|
// Backup Routes
|
||||||
|
Loading…
Reference in New Issue
Block a user