mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-03-28 00:21:47 +01:00
Remove media progress for podcast episodes when episode is removed
This commit is contained in:
parent
1372c24535
commit
56e3449db6
@ -1,4 +1,5 @@
|
|||||||
const Path = require('path')
|
const Path = require('path')
|
||||||
|
const Sequelize = require('sequelize')
|
||||||
const express = require('express')
|
const express = require('express')
|
||||||
const http = require('http')
|
const http = require('http')
|
||||||
const fs = require('./libs/fsExtra')
|
const fs = require('./libs/fsExtra')
|
||||||
@ -248,25 +249,45 @@ class Server {
|
|||||||
await this.scanner.scanFilesChanged(fileUpdates)
|
await this.scanner.scanFilesChanged(fileUpdates)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove user media progress with items that no longer exist & remove seriesHideFrom that no longer exist
|
/**
|
||||||
|
* Remove user media progress for items that no longer exist & remove seriesHideFrom that no longer exist
|
||||||
|
*/
|
||||||
async cleanUserData() {
|
async cleanUserData() {
|
||||||
|
// Get all media progress without an associated media item
|
||||||
|
const mediaProgressToRemove = await Database.models.mediaProgress.findAll({
|
||||||
|
where: {
|
||||||
|
'$podcastEpisode.id$': null,
|
||||||
|
'$book.id$': null
|
||||||
|
},
|
||||||
|
attributes: ['id'],
|
||||||
|
include: [
|
||||||
|
{
|
||||||
|
model: Database.models.book,
|
||||||
|
attributes: ['id']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
model: Database.models.podcastEpisode,
|
||||||
|
attributes: ['id']
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
if (mediaProgressToRemove.length) {
|
||||||
|
// Remove media progress
|
||||||
|
const mediaProgressRemoved = await Database.models.mediaProgress.destroy({
|
||||||
|
where: {
|
||||||
|
id: {
|
||||||
|
[Sequelize.Op.in]: mediaProgressToRemove.map(mp => mp.id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (mediaProgressRemoved) {
|
||||||
|
Logger.info(`[Server] Removed ${mediaProgressRemoved} media progress for media items that no longer exist in db`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove series from hide from continue listening that no longer exist
|
||||||
const users = await Database.models.user.getOldUsers()
|
const users = await Database.models.user.getOldUsers()
|
||||||
for (const _user of users) {
|
for (const _user of users) {
|
||||||
if (_user.mediaProgress.length) {
|
|
||||||
for (const mediaProgress of _user.mediaProgress) {
|
|
||||||
const libraryItem = Database.libraryItems.find(li => li.id === mediaProgress.libraryItemId)
|
|
||||||
if (libraryItem && mediaProgress.episodeId) {
|
|
||||||
const episode = libraryItem.media.checkHasEpisode?.(mediaProgress.episodeId)
|
|
||||||
if (episode) continue
|
|
||||||
} else {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.debug(`[Server] Removing media progress ${mediaProgress.id} data from user ${_user.username}`)
|
|
||||||
await Database.removeMediaProgress(mediaProgress.id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let hasUpdated = false
|
let hasUpdated = false
|
||||||
if (_user.seriesHideFromContinueListening.length) {
|
if (_user.seriesHideFromContinueListening.length) {
|
||||||
_user.seriesHideFromContinueListening = _user.seriesHideFromContinueListening.filter(seriesId => {
|
_user.seriesHideFromContinueListening = _user.seriesHideFromContinueListening.filter(seriesId => {
|
||||||
|
@ -263,7 +263,7 @@ class PodcastController {
|
|||||||
|
|
||||||
// Remove episode from Podcast and library file
|
// Remove episode from Podcast and library file
|
||||||
const episodeRemoved = libraryItem.media.removeEpisode(episodeId)
|
const episodeRemoved = libraryItem.media.removeEpisode(episodeId)
|
||||||
if (episodeRemoved && episodeRemoved.audioFile) {
|
if (episodeRemoved?.audioFile) {
|
||||||
libraryItem.removeLibraryFile(episodeRemoved.audioFile.ino)
|
libraryItem.removeLibraryFile(episodeRemoved.audioFile.ino)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,6 +283,16 @@ class PodcastController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove media progress for this episode
|
||||||
|
const mediaProgressRemoved = await Database.models.mediaProgress.destroy({
|
||||||
|
where: {
|
||||||
|
mediaItemId: episode.id
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (mediaProgressRemoved) {
|
||||||
|
Logger.info(`[PodcastController] Removed ${mediaProgressRemoved} media progress for episode ${episode.id}`)
|
||||||
|
}
|
||||||
|
|
||||||
await Database.updateLibraryItem(libraryItem)
|
await Database.updateLibraryItem(libraryItem)
|
||||||
SocketAuthority.emitter('item_updated', libraryItem.toJSONExpanded())
|
SocketAuthority.emitter('item_updated', libraryItem.toJSONExpanded())
|
||||||
res.json(libraryItem.toJSON())
|
res.json(libraryItem.toJSON())
|
||||||
|
Loading…
Reference in New Issue
Block a user