mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	Update:Podcast new episode check cronjob to use last episode pub date if exists otherwise fallback to using last check date
This commit is contained in:
		
							parent
							
								
									74d26eece4
								
							
						
					
					
						commit
						17d15144eb
					
				| @ -183,8 +183,15 @@ class PodcastManager { | |||||||
| 
 | 
 | ||||||
|     for (const libraryItem of podcastsWithAutoDownload) { |     for (const libraryItem of podcastsWithAutoDownload) { | ||||||
|       const lastEpisodeCheckDate = new Date(libraryItem.media.lastEpisodeCheck || 0) |       const lastEpisodeCheckDate = new Date(libraryItem.media.lastEpisodeCheck || 0) | ||||||
|       Logger.info(`[PodcastManager] checkForNewEpisodes Cron for "${libraryItem.media.metadata.title}" - Last episode check: ${lastEpisodeCheckDate}`) |       const latestEpisodePublishedAt = libraryItem.media.latestEpisodePublished | ||||||
|       var newEpisodes = await this.checkPodcastForNewEpisodes(libraryItem) |       Logger.info(`[PodcastManager] checkForNewEpisodes: "${libraryItem.media.metadata.title}" | Last check: ${lastEpisodeCheckDate} | ${latestEpisodePublishedAt ? `Latest episode pubDate: ${new Date(latestEpisodePublishedAt)}` : 'No latest episode'}`) | ||||||
|  | 
 | ||||||
|  |       // Use latest episode pubDate if exists OR fallback to using lastEpisodeCheckDate
 | ||||||
|  |       //    lastEpisodeCheckDate will be the current time when adding a new podcast
 | ||||||
|  |       const dateToCheckForEpisodesAfter = latestEpisodePublishedAt || lastEpisodeCheckDate | ||||||
|  |       Logger.debug(`[PodcastManager] checkForNewEpisodes: "${libraryItem.media.metadata.title}" checking for episodes after ${new Date(dateToCheckForEpisodesAfter)}`) | ||||||
|  | 
 | ||||||
|  |       var newEpisodes = await this.checkPodcastForNewEpisodes(libraryItem, dateToCheckForEpisodesAfter) | ||||||
|       Logger.debug(`[PodcastManager] checkForNewEpisodes checked result ${newEpisodes ? newEpisodes.length : 'N/A'}`) |       Logger.debug(`[PodcastManager] checkForNewEpisodes checked result ${newEpisodes ? newEpisodes.length : 'N/A'}`) | ||||||
| 
 | 
 | ||||||
|       if (!newEpisodes) { // Failed
 |       if (!newEpisodes) { // Failed
 | ||||||
| @ -214,7 +221,7 @@ class PodcastManager { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   async checkPodcastForNewEpisodes(podcastLibraryItem) { |   async checkPodcastForNewEpisodes(podcastLibraryItem, dateToCheckForEpisodesAfter) { | ||||||
|     if (!podcastLibraryItem.media.metadata.feedUrl) { |     if (!podcastLibraryItem.media.metadata.feedUrl) { | ||||||
|       Logger.error(`[PodcastManager] checkPodcastForNewEpisodes no feed url for ${podcastLibraryItem.media.metadata.title} (ID: ${podcastLibraryItem.id})`) |       Logger.error(`[PodcastManager] checkPodcastForNewEpisodes no feed url for ${podcastLibraryItem.media.metadata.title} (ID: ${podcastLibraryItem.id})`) | ||||||
|       return false |       return false | ||||||
| @ -225,15 +232,8 @@ class PodcastManager { | |||||||
|       return false |       return false | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // Added for testing
 |  | ||||||
|     Logger.debug(`[PodcastManager] checkPodcastForNewEpisodes: ${feed.episodes.length} episodes in feed for "${podcastLibraryItem.media.metadata.title}"`) |  | ||||||
|     const latestEpisodes = feed.episodes.slice(0, 3) |  | ||||||
|     latestEpisodes.forEach((ep) => { |  | ||||||
|       Logger.debug(`[PodcastManager] checkPodcastForNewEpisodes: Recent episode "${ep.title}", pubDate=${ep.pubDate}, publishedAt=${ep.publishedAt}/${new Date(ep.publishedAt)} for "${podcastLibraryItem.media.metadata.title}"`) |  | ||||||
|     }) |  | ||||||
| 
 |  | ||||||
|     // Filter new and not already has
 |     // Filter new and not already has
 | ||||||
|     var newEpisodes = feed.episodes.filter(ep => ep.publishedAt > podcastLibraryItem.media.lastEpisodeCheck && !podcastLibraryItem.media.checkHasEpisodeByFeedUrl(ep.enclosure.url)) |     var newEpisodes = feed.episodes.filter(ep => ep.publishedAt > dateToCheckForEpisodesAfter && !podcastLibraryItem.media.checkHasEpisodeByFeedUrl(ep.enclosure.url)) | ||||||
|     // Max new episodes for safety = 3
 |     // Max new episodes for safety = 3
 | ||||||
|     newEpisodes = newEpisodes.slice(0, 3) |     newEpisodes = newEpisodes.slice(0, 3) | ||||||
|     return newEpisodes |     return newEpisodes | ||||||
| @ -242,7 +242,7 @@ class PodcastManager { | |||||||
|   async checkAndDownloadNewEpisodes(libraryItem) { |   async checkAndDownloadNewEpisodes(libraryItem) { | ||||||
|     const lastEpisodeCheckDate = new Date(libraryItem.media.lastEpisodeCheck || 0) |     const lastEpisodeCheckDate = new Date(libraryItem.media.lastEpisodeCheck || 0) | ||||||
|     Logger.info(`[PodcastManager] checkAndDownloadNewEpisodes for "${libraryItem.media.metadata.title}" - Last episode check: ${lastEpisodeCheckDate}`) |     Logger.info(`[PodcastManager] checkAndDownloadNewEpisodes for "${libraryItem.media.metadata.title}" - Last episode check: ${lastEpisodeCheckDate}`) | ||||||
|     var newEpisodes = await this.checkPodcastForNewEpisodes(libraryItem) |     var newEpisodes = await this.checkPodcastForNewEpisodes(libraryItem, libraryItem.media.lastEpisodeCheck) | ||||||
|     if (newEpisodes.length) { |     if (newEpisodes.length) { | ||||||
|       Logger.info(`[PodcastManager] Found ${newEpisodes.length} new episodes for podcast "${libraryItem.media.metadata.title}" - starting download`) |       Logger.info(`[PodcastManager] Found ${newEpisodes.length} new episodes for podcast "${libraryItem.media.metadata.title}" - starting download`) | ||||||
|       this.downloadPodcastEpisodes(libraryItem, newEpisodes) |       this.downloadPodcastEpisodes(libraryItem, newEpisodes) | ||||||
|  | |||||||
| @ -104,6 +104,15 @@ class Podcast { | |||||||
|   get numTracks() { |   get numTracks() { | ||||||
|     return this.episodes.length |     return this.episodes.length | ||||||
|   } |   } | ||||||
|  |   get latestEpisodePublished() { | ||||||
|  |     var largestPublishedAt = 0 | ||||||
|  |     this.episodes.forEach((ep) => { | ||||||
|  |       if (ep.publishedAt && ep.publishedAt > largestPublishedAt) { | ||||||
|  |         largestPublishedAt = ep.publishedAt | ||||||
|  |       } | ||||||
|  |     }) | ||||||
|  |     return largestPublishedAt | ||||||
|  |   } | ||||||
| 
 | 
 | ||||||
|   update(payload) { |   update(payload) { | ||||||
|     var json = this.toJSON() |     var json = this.toJSON() | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user