mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-08-06 20:08:41 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1b46d68027 | ||
|
|
d511612f21 | ||
|
|
6caa1aa2da | ||
|
|
32fae4a7c6 |
Generated
+15
@@ -2113,6 +2113,21 @@
|
||||
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/fsevents": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
||||
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/function-bind": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||
|
||||
@@ -65,5 +65,8 @@
|
||||
"nodemon": "^2.0.20",
|
||||
"nyc": "^15.1.0",
|
||||
"sinon": "^17.0.1"
|
||||
},
|
||||
"allowScripts": {
|
||||
"sqlite3@5.1.7": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,8 +58,12 @@ class PodcastScanner {
|
||||
/** @type {AudioFile[]} */
|
||||
let newAudioFiles = []
|
||||
|
||||
// Track episode add/remove/update so item_updated includes the current episode list
|
||||
let hasEpisodeChanges = false
|
||||
|
||||
if (libraryItemData.hasAudioFileChanges || libraryItemData.audioLibraryFiles.length !== existingPodcastEpisodes.length) {
|
||||
// Filter out and destroy episodes that were removed
|
||||
// Filter out and destroy episodes that were removed.
|
||||
// filter() returns a new array — reassign to media.podcastEpisodes before emit.
|
||||
const episodesToRemove = []
|
||||
existingPodcastEpisodes = existingPodcastEpisodes.filter((ep) => {
|
||||
if (libraryItemData.checkAudioFileRemoved(ep.audioFile)) {
|
||||
@@ -70,6 +74,7 @@ class PodcastScanner {
|
||||
})
|
||||
|
||||
if (episodesToRemove.length) {
|
||||
hasEpisodeChanges = true
|
||||
// Remove episodes from playlists and media progress
|
||||
const episodeIds = episodesToRemove.map((ep) => ep.id)
|
||||
await Database.playlistModel.removeMediaItemsFromPlaylists(episodeIds)
|
||||
@@ -116,6 +121,7 @@ class PodcastScanner {
|
||||
AudioFileScanner.setPodcastEpisodeMetadataFromAudioMetaTags(podcastEpisode, libraryScan)
|
||||
libraryScan.addLog(LogLevel.INFO, `Podcast episode "${podcastEpisode.title}" keys changed [${podcastEpisode.changed()?.join(', ')}]`)
|
||||
await podcastEpisode.save()
|
||||
hasEpisodeChanges = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,9 +161,13 @@ class PodcastScanner {
|
||||
libraryScan.addLog(LogLevel.INFO, `New Podcast episode "${newPodcastEpisode.title}" added`)
|
||||
await newPodcastEpisode.save()
|
||||
existingPodcastEpisodes.push(newPodcastEpisode)
|
||||
hasEpisodeChanges = true
|
||||
}
|
||||
}
|
||||
|
||||
// Keep association in sync for toOldJSONExpanded() / item_updated socket payload
|
||||
media.podcastEpisodes = existingPodcastEpisodes
|
||||
|
||||
let hasMediaChanges = false
|
||||
if (existingPodcastEpisodes.length !== media.numEpisodes) {
|
||||
media.numEpisodes = existingPodcastEpisodes.length
|
||||
@@ -250,7 +260,7 @@ class PodcastScanner {
|
||||
|
||||
return {
|
||||
libraryItem: existingLibraryItem,
|
||||
wasUpdated: hasMediaChanges || libraryItemUpdated
|
||||
wasUpdated: hasMediaChanges || libraryItemUpdated || hasEpisodeChanges
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user