mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-01-09 04:29:36 +00:00
New data model play media entity, PlaybackSessionManager
This commit is contained in:
parent
1cf9e85272
commit
099ae7c776
54 changed files with 841 additions and 902 deletions
|
|
@ -3,6 +3,7 @@ const fs = require('fs-extra')
|
|||
const njodb = require("njodb")
|
||||
|
||||
const { SupportedEbookTypes } = require('./globals')
|
||||
const { PlayMethod } = require('./constants')
|
||||
const { getId } = require('./index')
|
||||
const Logger = require('../Logger')
|
||||
|
||||
|
|
@ -335,6 +336,8 @@ function cleanSessionObj(db, userListeningSession) {
|
|||
newPlaybackSession.mediaType = 'book'
|
||||
newPlaybackSession.updatedAt = userListeningSession.lastUpdate
|
||||
newPlaybackSession.libraryItemId = userListeningSession.audiobookId
|
||||
newPlaybackSession.mediaEntityId = userListeningSession.audiobookId
|
||||
newPlaybackSession.playMethod = PlayMethod.TRANSCODE
|
||||
|
||||
// We only have title to transfer over nicely
|
||||
var bookMetadata = new BookMetadata()
|
||||
|
|
|
|||
|
|
@ -132,9 +132,6 @@ async function recurseFiles(path, relPathToReplace = null) {
|
|||
// Sort from least deep to most
|
||||
list.sort((a, b) => a.deep - b.deep)
|
||||
|
||||
// list.forEach((l) => {
|
||||
// console.log(`${l.deep}: ${l.path}`)
|
||||
// })
|
||||
return list
|
||||
}
|
||||
module.exports.recurseFiles = recurseFiles
|
||||
|
|
|
|||
|
|
@ -28,11 +28,10 @@ module.exports = {
|
|||
else if (group === 'narrators') filtered = filtered.filter(li => li.media.metadata && li.media.metadata.hasNarrator(filter))
|
||||
else if (group === 'progress') {
|
||||
filtered = filtered.filter(li => {
|
||||
var userAudiobook = user.getLibraryItemProgress(li.id)
|
||||
var isRead = userAudiobook && userAudiobook.isRead
|
||||
if (filter === 'Read' && isRead) return true
|
||||
if (filter === 'Unread' && !isRead) return true
|
||||
if (filter === 'In Progress' && (userAudiobook && !userAudiobook.isRead && userAudiobook.progress > 0)) return true
|
||||
var itemProgress = user.getLibraryItemProgress(li.id)
|
||||
if (filter === 'Finished' && (itemProgress && itemProgress.isFinished)) return true
|
||||
if (filter === 'Not Started' && !itemProgress) return true
|
||||
if (filter === 'In Progress' && (itemProgress && itemProgress.inProgress)) return true
|
||||
return false
|
||||
})
|
||||
} else if (group === 'languages') {
|
||||
|
|
@ -49,43 +48,6 @@ module.exports = {
|
|||
return filtered
|
||||
},
|
||||
|
||||
getFiltered(audiobooks, filterBy, user) {
|
||||
var filtered = audiobooks
|
||||
|
||||
var searchGroups = ['genres', 'tags', 'series', 'authors', 'progress', 'narrators', 'languages']
|
||||
var group = searchGroups.find(_group => filterBy.startsWith(_group + '.'))
|
||||
if (group) {
|
||||
var filterVal = filterBy.replace(`${group}.`, '')
|
||||
var filter = this.decode(filterVal)
|
||||
if (group === 'genres') filtered = filtered.filter(ab => ab.book && ab.book.genres.includes(filter))
|
||||
else if (group === 'tags') filtered = filtered.filter(ab => ab.tags.includes(filter))
|
||||
else if (group === 'series') {
|
||||
if (filter === 'No Series') filtered = filtered.filter(ab => ab.book && !ab.book.series)
|
||||
else filtered = filtered.filter(ab => ab.book && ab.book.series === filter)
|
||||
}
|
||||
else if (group === 'authors') filtered = filtered.filter(ab => ab.book && ab.book.authorFL && ab.book.authorFL.split(', ').includes(filter))
|
||||
else if (group === 'narrators') filtered = filtered.filter(ab => ab.book && ab.book.narratorFL && ab.book.narratorFL.split(', ').includes(filter))
|
||||
else if (group === 'progress') {
|
||||
filtered = filtered.filter(ab => {
|
||||
var userAudiobook = user.getLibraryItemProgress(ab.id)
|
||||
var isRead = userAudiobook && userAudiobook.isRead
|
||||
if (filter === 'Read' && isRead) return true
|
||||
if (filter === 'Unread' && !isRead) return true
|
||||
if (filter === 'In Progress' && (userAudiobook && !userAudiobook.isRead && userAudiobook.progress > 0)) return true
|
||||
return false
|
||||
})
|
||||
} else if (group === 'languages') {
|
||||
filtered = filtered.filter(ab => ab.book && ab.book.language === filter)
|
||||
}
|
||||
} else if (filterBy === 'issues') {
|
||||
filtered = filtered.filter(ab => {
|
||||
return ab.numMissingParts || ab.numInvalidParts || ab.isMissing || ab.isInvalid
|
||||
})
|
||||
}
|
||||
|
||||
return filtered
|
||||
},
|
||||
|
||||
getDistinctFilterDataNew(libraryItems) {
|
||||
var data = {
|
||||
authors: [],
|
||||
|
|
@ -160,26 +122,27 @@ module.exports = {
|
|||
},
|
||||
|
||||
getSeriesWithProgressFromBooks(user, books) {
|
||||
var _series = {}
|
||||
books.forEach((audiobook) => {
|
||||
if (audiobook.book.series) {
|
||||
var bookWithUserAb = { userAudiobook: user.getLibraryItemProgress(audiobook.id), book: audiobook }
|
||||
if (!_series[audiobook.book.series]) {
|
||||
_series[audiobook.book.series] = {
|
||||
id: audiobook.book.series,
|
||||
name: audiobook.book.series,
|
||||
type: 'series',
|
||||
books: [bookWithUserAb]
|
||||
}
|
||||
} else {
|
||||
_series[audiobook.book.series].books.push(bookWithUserAb)
|
||||
}
|
||||
}
|
||||
})
|
||||
return Object.values(_series).map((series) => {
|
||||
series.books = naturalSort(series.books).asc(ab => ab.book.book.volumeNumber)
|
||||
return series
|
||||
}).filter((series) => series.books.some((book) => book.userAudiobook && book.userAudiobook.isRead))
|
||||
return []
|
||||
// var _series = {}
|
||||
// books.forEach((audiobook) => {
|
||||
// if (audiobook.book.series) {
|
||||
// var bookWithUserAb = { userAudiobook: user.getLibraryItemProgress(audiobook.id), book: audiobook }
|
||||
// if (!_series[audiobook.book.series]) {
|
||||
// _series[audiobook.book.series] = {
|
||||
// id: audiobook.book.series,
|
||||
// name: audiobook.book.series,
|
||||
// type: 'series',
|
||||
// books: [bookWithUserAb]
|
||||
// }
|
||||
// } else {
|
||||
// _series[audiobook.book.series].books.push(bookWithUserAb)
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// return Object.values(_series).map((series) => {
|
||||
// series.books = naturalSort(series.books).asc(ab => ab.book.book.volumeNumber)
|
||||
// return series
|
||||
// }).filter((series) => series.books.some((book) => book.userAudiobook && book.userAudiobook.isRead))
|
||||
},
|
||||
|
||||
sortSeriesBooks(books, seriesId, minified = false) {
|
||||
|
|
@ -196,8 +159,9 @@ module.exports = {
|
|||
|
||||
getItemsWithUserProgress(user, libraryItems) {
|
||||
return libraryItems.map(li => {
|
||||
var itemProgress = user.getLibraryItemProgress(li.id)
|
||||
return {
|
||||
userProgress: user.getLibraryItemProgress(li.id),
|
||||
userProgress: itemProgress ? itemProgress.toJSON() : null,
|
||||
libraryItem: li
|
||||
}
|
||||
}).filter(b => !!b.userProgress)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue