mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-08-03 17:54:54 +02:00
New data model removing media entity for books
This commit is contained in:
parent
920ca683b9
commit
3150822117
44 changed files with 733 additions and 798 deletions
|
@ -138,11 +138,7 @@ class LibraryController {
|
|||
// api/libraries/:id/items
|
||||
// TODO: Optimize this method, items are iterated through several times but can be combined
|
||||
getLibraryItems(req, res) {
|
||||
var media = req.query.media || 'all'
|
||||
var libraryItems = req.libraryItems.filter(li => {
|
||||
if (media != 'all') return li.mediaType == media
|
||||
return true
|
||||
})
|
||||
var libraryItems = req.libraryItems
|
||||
var payload = {
|
||||
results: [],
|
||||
total: libraryItems.length,
|
||||
|
@ -151,7 +147,7 @@ class LibraryController {
|
|||
sortBy: req.query.sort,
|
||||
sortDesc: req.query.desc === '1',
|
||||
filterBy: req.query.filter,
|
||||
media,
|
||||
mediaType: req.library.mediaType,
|
||||
minified: req.query.minified === '1',
|
||||
collapseseries: req.query.collapseseries === '1'
|
||||
}
|
||||
|
|
|
@ -164,13 +164,26 @@ class LibraryItemController {
|
|||
|
||||
// POST: api/items/:id/play
|
||||
startPlaybackSession(req, res) {
|
||||
var playbackMediaEntity = req.libraryItem.getPlaybackMediaEntity()
|
||||
if (!playbackMediaEntity) {
|
||||
Logger.error(`[LibraryItemController] startPlaybackSession no playback media entity ${req.libraryItem.id}`)
|
||||
if (!req.libraryItem.media.numTracks) {
|
||||
Logger.error(`[LibraryItemController] startPlaybackSession cannot playback ${req.libraryItem.id}`)
|
||||
return res.sendStatus(404)
|
||||
}
|
||||
const options = req.body || {}
|
||||
this.playbackSessionManager.startSessionRequest(req.user, req.libraryItem, playbackMediaEntity, options, res)
|
||||
this.playbackSessionManager.startSessionRequest(req.user, req.libraryItem, options, res)
|
||||
}
|
||||
|
||||
// PATCH: api/items/:id/tracks
|
||||
async updateTracks(req, res) {
|
||||
var libraryItem = req.libraryItem
|
||||
var orderedFileData = req.body.orderedFileData
|
||||
if (!libraryItem.media.updateAudioTracks) {
|
||||
Logger.error(`[LibraryItemController] updateTracks invalid media type ${libraryItem.id}`)
|
||||
return res.sendStatus(500)
|
||||
}
|
||||
libraryItem.media.updateAudioTracks(orderedFileData)
|
||||
await this.db.updateLibraryItem(libraryItem)
|
||||
this.emitter('item_updated', libraryItem.toJSONExpanded())
|
||||
res.json(libraryItem.toJSON())
|
||||
}
|
||||
|
||||
// POST api/items/:id/match
|
||||
|
|
|
@ -17,8 +17,8 @@ class MeController {
|
|||
}
|
||||
|
||||
// DELETE: api/me/progress/:id
|
||||
async removeLibraryItemProgress(req, res) {
|
||||
var wasRemoved = req.user.removeLibraryItemProgress(req.params.id)
|
||||
async removeMediaProgress(req, res) {
|
||||
var wasRemoved = req.user.removeMediaProgress(req.params.id)
|
||||
if (!wasRemoved) {
|
||||
return res.sendStatus(200)
|
||||
}
|
||||
|
@ -30,12 +30,12 @@ class MeController {
|
|||
}
|
||||
|
||||
// PATCH: api/me/progress/:id
|
||||
async createUpdateLibraryItemProgress(req, res) {
|
||||
async createUpdateMediaProgress(req, res) {
|
||||
var libraryItem = this.db.libraryItems.find(ab => ab.id === req.params.id)
|
||||
if (!libraryItem) {
|
||||
return res.status(404).send('Item not found')
|
||||
}
|
||||
var wasUpdated = req.user.createUpdateLibraryItemProgress(libraryItem, req.body)
|
||||
var wasUpdated = req.user.createUpdateMediaProgress(libraryItem, req.body)
|
||||
if (wasUpdated) {
|
||||
await this.db.updateEntity('user', req.user)
|
||||
this.clientEmitter(req.user.id, 'user_updated', req.user.toJSONForBrowser())
|
||||
|
@ -44,7 +44,7 @@ class MeController {
|
|||
}
|
||||
|
||||
// PATCH: api/me/progress/batch/update
|
||||
async batchUpdateLibraryItemProgress(req, res) {
|
||||
async batchUpdateMediaProgress(req, res) {
|
||||
var itemProgressPayloads = req.body
|
||||
if (!itemProgressPayloads || !itemProgressPayloads.length) {
|
||||
return res.sendStatus(500)
|
||||
|
@ -54,10 +54,10 @@ class MeController {
|
|||
itemProgressPayloads.forEach((itemProgress) => {
|
||||
var libraryItem = this.db.libraryItems.find(li => li.id === itemProgress.id) // Make sure this library item exists
|
||||
if (libraryItem) {
|
||||
var wasUpdated = req.user.createUpdateLibraryItemProgress(libraryItem, itemProgress)
|
||||
var wasUpdated = req.user.createUpdateMediaProgress(libraryItem, itemProgress)
|
||||
if (wasUpdated) shouldUpdate = true
|
||||
} else {
|
||||
Logger.error(`[MeController] batchUpdateLibraryItemProgress: Library Item does not exist ${itemProgress.id}`)
|
||||
Logger.error(`[MeController] batchUpdateMediaProgress: Library Item does not exist ${itemProgress.id}`)
|
||||
}
|
||||
})
|
||||
|
||||
|
|
|
@ -1,71 +0,0 @@
|
|||
const Logger = require('../Logger')
|
||||
|
||||
class MediaEntityController {
|
||||
constructor() { }
|
||||
|
||||
async findOne(req, res) {
|
||||
if (req.query.expanded == 1) return res.json(req.mediaEntity.toJSONExpanded())
|
||||
return res.json(req.mediaEntity)
|
||||
}
|
||||
|
||||
async findWithItem(req, res) {
|
||||
if (req.query.expanded == 1) {
|
||||
return res.json({
|
||||
libraryItem: req.libraryItem.toJSONExpanded(),
|
||||
mediaEntity: req.mediaEntity.toJSONExpanded()
|
||||
})
|
||||
}
|
||||
res.json({
|
||||
libraryItem: req.libraryItem.toJSON(),
|
||||
mediaEntity: req.mediaEntity.toJSON()
|
||||
})
|
||||
}
|
||||
|
||||
// PATCH: api/entities/:id/tracks
|
||||
async updateTracks(req, res) {
|
||||
var libraryItem = req.libraryItem
|
||||
var mediaEntity = req.mediaEntity
|
||||
var orderedFileData = req.body.orderedFileData
|
||||
if (!mediaEntity.updateAudioTracks) {
|
||||
Logger.error(`[MediaEntityController] updateTracks invalid media entity ${mediaEntity.id}`)
|
||||
return res.sendStatus(500)
|
||||
}
|
||||
mediaEntity.updateAudioTracks(orderedFileData)
|
||||
await this.db.updateLibraryItem(libraryItem)
|
||||
this.emitter('item_updated', libraryItem.toJSONExpanded())
|
||||
res.json(libraryItem.toJSON())
|
||||
}
|
||||
|
||||
// POST: api/entities/:id/play
|
||||
startPlaybackSession(req, res) {
|
||||
if (!req.mediaEntity.isPlaybackMediaEntity) {
|
||||
Logger.error(`[MediaEntityController] startPlaybackSession invalid media entity ${req.mediaEntity.id}`)
|
||||
return res.sendStatus(500)
|
||||
}
|
||||
const options = req.body || {}
|
||||
this.playbackSessionManager.startSessionRequest(req.user, req.libraryItem, req.mediaEntity, options, res)
|
||||
}
|
||||
|
||||
middleware(req, res, next) {
|
||||
var mediaEntity = null
|
||||
var libraryItem = this.db.libraryItems.find(li => {
|
||||
if (li.mediaType != 'book') return false
|
||||
mediaEntity = li.media.getMediaEntityById(req.params.id)
|
||||
return !!mediaEntity
|
||||
})
|
||||
if (!mediaEntity) return res.sendStatus(404)
|
||||
|
||||
if (req.method == 'DELETE' && !req.user.canDelete) {
|
||||
Logger.warn(`[MediaEntityController] User attempted to delete without permission`, req.user)
|
||||
return res.sendStatus(403)
|
||||
} else if ((req.method == 'PATCH' || req.method == 'POST') && !req.user.canUpdate) {
|
||||
Logger.warn('[MediaEntityController] User attempted to update without permission', req.user)
|
||||
return res.sendStatus(403)
|
||||
}
|
||||
|
||||
req.mediaEntity = mediaEntity
|
||||
req.libraryItem = libraryItem
|
||||
next()
|
||||
}
|
||||
}
|
||||
module.exports = new MediaEntityController()
|
Loading…
Add table
Add a link
Reference in a new issue