mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-08-05 02:34:56 +02:00
Update:Paginated listening sessions
This commit is contained in:
parent
0e1692d26b
commit
3171ce5aba
7 changed files with 122 additions and 49 deletions
|
@ -1,5 +1,5 @@
|
|||
const Logger = require('../Logger')
|
||||
const { isObject } = require('../utils/index')
|
||||
const { isObject, toNumber } = require('../utils/index')
|
||||
|
||||
class MeController {
|
||||
constructor() { }
|
||||
|
@ -7,7 +7,22 @@ class MeController {
|
|||
// GET: api/me/listening-sessions
|
||||
async getListeningSessions(req, res) {
|
||||
var listeningSessions = await this.getUserListeningSessionsHelper(req.user.id)
|
||||
res.json(listeningSessions.slice(0, 10))
|
||||
|
||||
const itemsPerPage = toNumber(req.query.itemsPerPage, 10) || 10
|
||||
const page = toNumber(req.query.page, 0)
|
||||
|
||||
const start = page * itemsPerPage
|
||||
const sessions = listeningSessions.slice(start, start + itemsPerPage)
|
||||
|
||||
const payload = {
|
||||
total: listeningSessions.length,
|
||||
numPages: Math.ceil(listeningSessions.length / itemsPerPage),
|
||||
page,
|
||||
itemsPerPage,
|
||||
sessions
|
||||
}
|
||||
|
||||
res.json(payload)
|
||||
}
|
||||
|
||||
// GET: api/me/listening-stats
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
const Logger = require('../Logger')
|
||||
const User = require('../objects/user/User')
|
||||
|
||||
const { getId } = require('../utils/index')
|
||||
const { getId, toNumber } = require('../utils/index')
|
||||
|
||||
class UserController {
|
||||
constructor() { }
|
||||
|
@ -142,8 +142,24 @@ class UserController {
|
|||
if (!req.user.isAdminOrUp && req.user.id !== req.params.id) {
|
||||
return res.sendStatus(403)
|
||||
}
|
||||
|
||||
var listeningSessions = await this.getUserListeningSessionsHelper(req.params.id)
|
||||
res.json(listeningSessions.slice(0, 10))
|
||||
|
||||
const itemsPerPage = toNumber(req.query.itemsPerPage, 10) || 10
|
||||
const page = toNumber(req.query.page, 0)
|
||||
|
||||
const start = page * itemsPerPage
|
||||
const sessions = listeningSessions.slice(start, start + itemsPerPage)
|
||||
|
||||
const payload = {
|
||||
total: listeningSessions.length,
|
||||
numPages: Math.ceil(listeningSessions.length / itemsPerPage),
|
||||
page,
|
||||
itemsPerPage,
|
||||
sessions
|
||||
}
|
||||
|
||||
res.json(payload)
|
||||
}
|
||||
|
||||
// GET: api/users/:id/listening-stats
|
||||
|
|
|
@ -696,7 +696,7 @@ class Scanner {
|
|||
}
|
||||
|
||||
// Add or set author if not set
|
||||
if (matchData.author && !libraryItem.media.metadata.authorName || options.overrideDetails) {
|
||||
if (matchData.author && (!libraryItem.media.metadata.authorName || options.overrideDetails)) {
|
||||
if (!Array.isArray(matchData.author)) matchData.author = [matchData.author]
|
||||
const authorPayload = []
|
||||
for (let index = 0; index < matchData.author.length; index++) {
|
||||
|
@ -714,7 +714,7 @@ class Scanner {
|
|||
}
|
||||
|
||||
// Add or set series if not set
|
||||
if (matchData.series && !libraryItem.media.metadata.seriesName || options.overrideDetails) {
|
||||
if (matchData.series && (!libraryItem.media.metadata.seriesName || options.overrideDetails)) {
|
||||
if (!Array.isArray(matchData.series)) matchData.series = [{ series: matchData.series, volumeNumber: matchData.volumeNumber }]
|
||||
const seriesPayload = []
|
||||
for (let index = 0; index < matchData.series.length; index++) {
|
||||
|
|
|
@ -124,4 +124,9 @@ module.exports.copyValue = (val) => {
|
|||
|
||||
module.exports.encodeUriPath = (path) => {
|
||||
return path.replace(/\\/g, '/').replace(/%/g, '%25').replace(/#/g, '%23')
|
||||
}
|
||||
|
||||
module.exports.toNumber = (val, fallback = 0) => {
|
||||
if (isNaN(val) || val === null) return fallback
|
||||
return Number(val)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue