mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-08-02 09:14:40 +02:00
Update:Cleanup socket usage & add func for emitting events to admin users
This commit is contained in:
parent
e2af33e136
commit
180293ebc1
7 changed files with 90 additions and 105 deletions
|
@ -262,13 +262,13 @@ class ApiRouter {
|
|||
|
||||
async getDirectories(dir, relpath, excludedDirs, level = 0) {
|
||||
try {
|
||||
var paths = await fs.readdir(dir)
|
||||
const paths = await fs.readdir(dir)
|
||||
|
||||
var dirs = await Promise.all(paths.map(async dirname => {
|
||||
var fullPath = Path.join(dir, dirname)
|
||||
var path = Path.join(relpath, dirname)
|
||||
let dirs = await Promise.all(paths.map(async dirname => {
|
||||
const fullPath = Path.join(dir, dirname)
|
||||
const path = Path.join(relpath, dirname)
|
||||
|
||||
var isDir = (await fs.lstat(fullPath)).isDirectory()
|
||||
const isDir = (await fs.lstat(fullPath)).isDirectory()
|
||||
if (isDir && !excludedDirs.includes(path) && dirname !== 'node_modules') {
|
||||
return {
|
||||
path,
|
||||
|
@ -293,13 +293,13 @@ class ApiRouter {
|
|||
// Helper Methods
|
||||
//
|
||||
userJsonWithItemProgressDetails(user, hideRootToken = false) {
|
||||
var json = user.toJSONForBrowser()
|
||||
const json = user.toJSONForBrowser()
|
||||
if (json.type === 'root' && hideRootToken) {
|
||||
json.token = ''
|
||||
}
|
||||
|
||||
json.mediaProgress = json.mediaProgress.map(lip => {
|
||||
var libraryItem = this.db.libraryItems.find(li => li.id === lip.libraryItemId)
|
||||
const libraryItem = this.db.libraryItems.find(li => li.id === lip.libraryItemId)
|
||||
if (!libraryItem) {
|
||||
Logger.warn('[ApiRouter] Library item not found for users progress ' + lip.libraryItemId)
|
||||
lip.media = null
|
||||
|
@ -326,31 +326,18 @@ class ApiRouter {
|
|||
async handleDeleteLibraryItem(libraryItem) {
|
||||
// Remove libraryItem from users
|
||||
for (let i = 0; i < this.db.users.length; i++) {
|
||||
var user = this.db.users[i]
|
||||
var madeUpdates = user.removeMediaProgressForLibraryItem(libraryItem.id)
|
||||
if (madeUpdates) {
|
||||
const user = this.db.users[i]
|
||||
if (user.removeMediaProgressForLibraryItem(libraryItem.id)) {
|
||||
await this.db.updateEntity('user', user)
|
||||
}
|
||||
}
|
||||
|
||||
// remove any streams open for this audiobook
|
||||
// TODO: Change to PlaybackSessionManager to remove open sessions for user
|
||||
// var streams = this.streamManager.streams.filter(stream => stream.audiobookId === libraryItem.id)
|
||||
// for (let i = 0; i < streams.length; i++) {
|
||||
// var stream = streams[i]
|
||||
// var client = stream.client
|
||||
// await stream.close()
|
||||
// if (client && client.user) {
|
||||
// client.user.stream = null
|
||||
// client.stream = null
|
||||
// this.db.updateUserStream(client.user.id, null)
|
||||
// }
|
||||
// }
|
||||
// TODO: Remove open sessions for library item
|
||||
|
||||
// remove book from collections
|
||||
var collectionsWithBook = this.db.collections.filter(c => c.books.includes(libraryItem.id))
|
||||
const collectionsWithBook = this.db.collections.filter(c => c.books.includes(libraryItem.id))
|
||||
for (let i = 0; i < collectionsWithBook.length; i++) {
|
||||
var collection = collectionsWithBook[i]
|
||||
const collection = collectionsWithBook[i]
|
||||
collection.removeBook(libraryItem.id)
|
||||
await this.db.updateEntity('collection', collection)
|
||||
SocketAuthority.clientEmitter(collection.userId, 'collection_updated', collection.toJSONExpanded(this.db.libraryItems))
|
||||
|
@ -361,34 +348,32 @@ class ApiRouter {
|
|||
await this.cacheManager.purgeCoverCache(libraryItem.id)
|
||||
}
|
||||
|
||||
var json = libraryItem.toJSONExpanded()
|
||||
await this.db.removeLibraryItem(libraryItem.id)
|
||||
SocketAuthority.emitter('item_removed', json)
|
||||
SocketAuthority.emitter('item_removed', libraryItem.toJSONExpanded())
|
||||
}
|
||||
|
||||
async getUserListeningSessionsHelper(userId) {
|
||||
var userSessions = await this.db.selectUserSessions(userId)
|
||||
const userSessions = await this.db.selectUserSessions(userId)
|
||||
return userSessions.sort((a, b) => b.updatedAt - a.updatedAt)
|
||||
}
|
||||
|
||||
async getAllSessionsWithUserData() {
|
||||
var sessions = await this.db.getAllSessions()
|
||||
const sessions = await this.db.getAllSessions()
|
||||
sessions.sort((a, b) => b.updatedAt - a.updatedAt)
|
||||
return sessions.map(se => {
|
||||
var user = this.db.users.find(u => u.id === se.userId)
|
||||
var _se = {
|
||||
const user = this.db.users.find(u => u.id === se.userId)
|
||||
return {
|
||||
...se,
|
||||
user: user ? { id: user.id, username: user.username } : null
|
||||
}
|
||||
return _se
|
||||
})
|
||||
}
|
||||
|
||||
async getUserListeningStatsHelpers(userId) {
|
||||
const today = date.format(new Date(), 'YYYY-MM-DD')
|
||||
|
||||
var listeningSessions = await this.getUserListeningSessionsHelper(userId)
|
||||
var listeningStats = {
|
||||
const listeningSessions = await this.getUserListeningSessionsHelper(userId)
|
||||
const listeningStats = {
|
||||
totalTime: 0,
|
||||
items: {},
|
||||
days: {},
|
||||
|
@ -397,7 +382,7 @@ class ApiRouter {
|
|||
recentSessions: listeningSessions.slice(0, 10)
|
||||
}
|
||||
listeningSessions.forEach((s) => {
|
||||
var sessionTimeListening = s.timeListening
|
||||
let sessionTimeListening = s.timeListening
|
||||
if (typeof sessionTimeListening == 'string') {
|
||||
sessionTimeListening = Number(sessionTimeListening)
|
||||
}
|
||||
|
@ -432,15 +417,15 @@ class ApiRouter {
|
|||
|
||||
async createAuthorsAndSeriesForItemUpdate(mediaPayload) {
|
||||
if (mediaPayload.metadata) {
|
||||
var mediaMetadata = mediaPayload.metadata
|
||||
const mediaMetadata = mediaPayload.metadata
|
||||
|
||||
// Create new authors if in payload
|
||||
if (mediaMetadata.authors && mediaMetadata.authors.length) {
|
||||
// TODO: validate authors
|
||||
var newAuthors = []
|
||||
const newAuthors = []
|
||||
for (let i = 0; i < mediaMetadata.authors.length; i++) {
|
||||
if (mediaMetadata.authors[i].id.startsWith('new')) {
|
||||
var author = this.db.authors.find(au => au.checkNameEquals(mediaMetadata.authors[i].name))
|
||||
let author = this.db.authors.find(au => au.checkNameEquals(mediaMetadata.authors[i].name))
|
||||
if (!author) {
|
||||
author = new Author()
|
||||
author.setData(mediaMetadata.authors[i])
|
||||
|
@ -461,10 +446,10 @@ class ApiRouter {
|
|||
// Create new series if in payload
|
||||
if (mediaMetadata.series && mediaMetadata.series.length) {
|
||||
// TODO: validate series
|
||||
var newSeries = []
|
||||
const newSeries = []
|
||||
for (let i = 0; i < mediaMetadata.series.length; i++) {
|
||||
if (mediaMetadata.series[i].id.startsWith('new')) {
|
||||
var seriesItem = this.db.series.find(se => se.checkNameEquals(mediaMetadata.series[i].name))
|
||||
let seriesItem = this.db.series.find(se => se.checkNameEquals(mediaMetadata.series[i].name))
|
||||
if (!seriesItem) {
|
||||
seriesItem = new Series()
|
||||
seriesItem.setData(mediaMetadata.series[i])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue