New data model Book media type contains Audiobooks updates

This commit is contained in:
advplyr 2022-03-17 12:25:12 -05:00
parent 1dde02b170
commit c4eeb1cfb7
30 changed files with 347 additions and 247 deletions

View file

@ -0,0 +1,57 @@
const Logger = require('../Logger')
class AudiobookController {
constructor() { }
async findOne(req, res) {
if (req.query.expanded == 1) return res.json(req.audiobook.toJSONExpanded())
return res.json(req.audiobook)
}
async findWithItem(req, res) {
if (req.query.expanded == 1) {
return res.json({
libraryItem: req.libraryItem.toJSONExpanded(),
audiobook: req.audiobook.toJSONExpanded()
})
}
res.json({
libraryItem: req.libraryItem.toJSON(),
audiobook: req.audiobook.toJSON()
})
}
// PATCH: api/audiobooks/:id/tracks
async updateTracks(req, res) {
var libraryItem = req.libraryItem
var audiobook = req.audiobook
var orderedFileData = req.body.orderedFileData
audiobook.updateAudioTracks(orderedFileData)
await this.db.updateLibraryItem(libraryItem)
this.emitter('item_updated', libraryItem.toJSONExpanded())
res.json(libraryItem.toJSON())
}
middleware(req, res, next) {
var audiobook = null
var libraryItem = this.db.libraryItems.find(li => {
if (li.mediaType != 'book') return false
audiobook = li.media.getAudiobookById(req.params.id)
return !!audiobook
})
if (!audiobook) return res.sendStatus(404)
if (req.method == 'DELETE' && !req.user.canDelete) {
Logger.warn(`[AudiobookController] 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('[AudiobookController] User attempted to update without permission', req.user)
return res.sendStatus(403)
}
req.libraryItem = libraryItem
req.audiobook = audiobook
next()
}
}
module.exports = new AudiobookController()

View file

@ -146,7 +146,7 @@ class LibraryController {
if (payload.sortBy) {
var sortKey = payload.sortBy
// old sort key
// old sort key TODO: should be mutated in dbMigration
if (sortKey.startsWith('book.')) {
sortKey = sortKey.replace('book.', 'media.metadata.')
}
@ -263,26 +263,26 @@ class LibraryController {
var limitPerShelf = req.query.limit && !isNaN(req.query.limit) ? Number(req.query.limit) : 12
var minified = req.query.minified === '1'
var booksWithUserAb = libraryHelpers.getBooksWithUserAudiobook(req.user, libraryItems)
var itemsWithUserProgress = libraryHelpers.getItemsWithUserProgress(req.user, libraryItems)
var categories = [
{
id: 'continue-reading',
label: 'Continue Reading',
type: 'books',
entities: libraryHelpers.getBooksMostRecentlyRead(booksWithUserAb, limitPerShelf, minified)
type: req.library.mediaType,
entities: libraryHelpers.getItemsMostRecentlyListened(itemsWithUserProgress, limitPerShelf, minified)
},
{
id: 'recently-added',
label: 'Recently Added',
type: 'books',
entities: libraryHelpers.getBooksMostRecentlyAdded(libraryItems, limitPerShelf, minified)
type: req.library.mediaType,
entities: libraryHelpers.getItemsMostRecentlyAdded(libraryItems, limitPerShelf, minified)
},
{
id: 'read-again',
label: 'Read Again',
type: 'books',
entities: libraryHelpers.getBooksMostRecentlyFinished(booksWithUserAb, limitPerShelf, minified)
type: req.library.mediaType,
entities: libraryHelpers.getItemsMostRecentlyFinished(itemsWithUserProgress, limitPerShelf, minified)
}
].filter(cats => { // Remove categories with no items
return cats.entities.length
@ -299,7 +299,7 @@ class LibraryController {
var limitPerShelf = req.query.limit && !isNaN(req.query.limit) ? Number(req.query.limit) : 12
var minified = req.query.minified === '1'
var booksWithUserAb = libraryHelpers.getBooksWithUserAudiobook(req.user, books)
var booksWithUserAb = libraryHelpers.getItemsWithUserProgress(req.user, books)
var series = libraryHelpers.getSeriesFromBooks(books, minified)
var seriesWithUserAb = libraryHelpers.getSeriesWithProgressFromBooks(req.user, books)

View file

@ -156,17 +156,6 @@ class LibraryItemController {
res.json(matchResult)
}
// PATCH: api/items/:id/tracks
async updateTracks(req, res) {
var libraryItem = req.libraryItem
var orderedFileData = req.body.orderedFileData
Logger.info(`Updating item tracks called ${libraryItem.id}`)
libraryItem.media.updateAudioTracks(orderedFileData)
await this.db.updateLibraryItem(libraryItem)
this.emitter('item_updated', libraryItem.toJSONExpanded())
res.json(libraryItem.toJSON())
}
// POST: api/items/batch/delete
async batchDelete(req, res) {
if (!req.user.canDelete) {