mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-06-25 12:12:26 +02:00
Update checking empty series to load from Db
This commit is contained in:
parent
361732a463
commit
7222171c5b
@ -114,7 +114,6 @@ class Server {
|
|||||||
|
|
||||||
await this.backupManager.init()
|
await this.backupManager.init()
|
||||||
await this.logManager.init()
|
await this.logManager.init()
|
||||||
await this.apiRouter.checkRemoveEmptySeries(Database.series) // Remove empty series
|
|
||||||
await this.rssFeedManager.init()
|
await this.rssFeedManager.init()
|
||||||
|
|
||||||
const libraries = await Database.models.library.getAllOldLibraries()
|
const libraries = await Database.models.library.getAllOldLibraries()
|
||||||
|
@ -135,7 +135,7 @@ class LibraryItemController {
|
|||||||
if (seriesRemoved.length) {
|
if (seriesRemoved.length) {
|
||||||
// Check remove empty series
|
// Check remove empty series
|
||||||
Logger.debug(`[LibraryItemController] Series was removed from book. Check if series is now empty.`)
|
Logger.debug(`[LibraryItemController] Series was removed from book. Check if series is now empty.`)
|
||||||
await this.checkRemoveEmptySeries(seriesRemoved)
|
await this.checkRemoveEmptySeries(libraryItem.media.id, seriesRemoved.map(se => se.id))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isPodcastAutoDownloadUpdated) {
|
if (isPodcastAutoDownloadUpdated) {
|
||||||
@ -351,8 +351,21 @@ class LibraryItemController {
|
|||||||
|
|
||||||
await this.createAuthorsAndSeriesForItemUpdate(mediaPayload, libraryItem.libraryId)
|
await this.createAuthorsAndSeriesForItemUpdate(mediaPayload, libraryItem.libraryId)
|
||||||
|
|
||||||
|
let seriesRemoved = []
|
||||||
|
if (libraryItem.isBook && mediaPayload.metadata?.series) {
|
||||||
|
const seriesIdsInUpdate = (mediaPayload.metadata?.series || []).map(se => se.id)
|
||||||
|
seriesRemoved = libraryItem.media.metadata.series.filter(se => !seriesIdsInUpdate.includes(se.id))
|
||||||
|
}
|
||||||
|
|
||||||
if (libraryItem.media.update(mediaPayload)) {
|
if (libraryItem.media.update(mediaPayload)) {
|
||||||
Logger.debug(`[LibraryItemController] Updated library item media ${libraryItem.media.metadata.title}`)
|
Logger.debug(`[LibraryItemController] Updated library item media ${libraryItem.media.metadata.title}`)
|
||||||
|
|
||||||
|
if (seriesRemoved.length) {
|
||||||
|
// Check remove empty series
|
||||||
|
Logger.debug(`[LibraryItemController] Series was removed from book. Check if series is now empty.`)
|
||||||
|
await this.checkRemoveEmptySeries(libraryItem.media.id, seriesRemoved.map(se => se.id))
|
||||||
|
}
|
||||||
|
|
||||||
await Database.updateLibraryItem(libraryItem)
|
await Database.updateLibraryItem(libraryItem)
|
||||||
SocketAuthority.emitter('item_updated', libraryItem.toJSONExpanded())
|
SocketAuthority.emitter('item_updated', libraryItem.toJSONExpanded())
|
||||||
itemsUpdated++
|
itemsUpdated++
|
||||||
|
@ -371,6 +371,7 @@ class ApiRouter {
|
|||||||
|
|
||||||
// Remove series if empty
|
// Remove series if empty
|
||||||
if (mediaType === 'book') {
|
if (mediaType === 'book') {
|
||||||
|
// TODO: update filter data
|
||||||
const bookSeries = await Database.models.bookSeries.findAll({
|
const bookSeries = await Database.models.bookSeries.findAll({
|
||||||
where: {
|
where: {
|
||||||
bookId: mediaItemIds[0]
|
bookId: mediaItemIds[0]
|
||||||
@ -440,17 +441,33 @@ class ApiRouter {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async checkRemoveEmptySeries(seriesToCheck, excludeLibraryItemId = null) {
|
/**
|
||||||
if (!seriesToCheck?.length) return
|
* Used when a series is removed from a book
|
||||||
|
* Series is removed if it only has 1 book
|
||||||
|
* TODO: Update filter data
|
||||||
|
* @param {UUIDV4} bookId
|
||||||
|
* @param {UUIDV4[]} seriesIds
|
||||||
|
*/
|
||||||
|
async checkRemoveEmptySeries(bookId, seriesIds) {
|
||||||
|
if (!seriesIds?.length) return
|
||||||
|
|
||||||
for (const series of seriesToCheck) {
|
const bookSeries = await Database.models.bookSeries.findAll({
|
||||||
const otherLibraryItemsInSeries = Database.libraryItems.filter(li => li.id !== excludeLibraryItemId && li.isBook && li.media.metadata.hasSeries(series.id))
|
where: {
|
||||||
if (!otherLibraryItemsInSeries.length) {
|
bookId,
|
||||||
// Close open RSS feed for series
|
seriesId: seriesIds
|
||||||
await this.rssFeedManager.closeFeedForEntityId(series.id)
|
},
|
||||||
Logger.info(`[ApiRouter] Series "${series.name}" is now empty. Removing series`)
|
include: [
|
||||||
await Database.removeSeries(series.id)
|
{
|
||||||
// TODO: Socket events for series?
|
model: Database.models.series,
|
||||||
|
include: {
|
||||||
|
model: Database.models.book
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
for (const bs of bookSeries) {
|
||||||
|
if (bs.series.books.length === 1) {
|
||||||
|
await this.removeEmptySeries(bs.series)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user