mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	Update:Podcast episodes look for new episodes after this date add input to set the max # of episodes to download
This commit is contained in:
		
							parent
							
								
									c17612a233
								
							
						
					
					
						commit
						3dc848a106
					
				| @ -2,8 +2,15 @@ | ||||
|   <div class="w-full h-full overflow-y-auto overflow-x-hidden px-4 py-6"> | ||||
|     <div class="w-full mb-4"> | ||||
|       <div v-if="userIsAdminOrUp" class="flex items-end justify-end mb-4"> | ||||
|         <!-- <p v-if="autoDownloadEpisodes">Last new episode check {{ $formatDate(lastEpisodeCheck) }}</p> --> | ||||
|         <ui-text-input-with-label ref="lastCheckInput" v-model="lastEpisodeCheckInput" :disabled="checkingNewEpisodes" type="datetime-local" label="Look for new episodes after this date" class="max-w-xs mr-2" /> | ||||
|         <ui-text-input-with-label ref="maxEpisodesInput" v-model="maxEpisodesToDownload" :disabled="checkingNewEpisodes" type="number" label="Max episodes" class="w-16 mr-2" input-class="h-10"> | ||||
|           <div class="flex -mb-0.5"> | ||||
|             <p class="px-1 text-sm font-semibold" :class="{ 'text-gray-400': checkingNewEpisodes }">Limit</p> | ||||
|             <ui-tooltip direction="top" text="Max # of episodes to download. Use 0 for unlimited."> | ||||
|               <span class="material-icons text-base">info_outlined</span> | ||||
|             </ui-tooltip> | ||||
|           </div> | ||||
|         </ui-text-input-with-label> | ||||
|         <ui-btn :loading="checkingNewEpisodes" @click="checkForNewEpisodes">Check & Download New Episodes</ui-btn> | ||||
|       </div> | ||||
| 
 | ||||
| @ -52,7 +59,8 @@ export default { | ||||
|   data() { | ||||
|     return { | ||||
|       checkingNewEpisodes: false, | ||||
|       lastEpisodeCheckInput: null | ||||
|       lastEpisodeCheckInput: null, | ||||
|       maxEpisodesToDownload: 3 | ||||
|     } | ||||
|   }, | ||||
|   watch: { | ||||
| @ -89,6 +97,16 @@ export default { | ||||
|       if (this.$refs.lastCheckInput) { | ||||
|         this.$refs.lastCheckInput.blur() | ||||
|       } | ||||
|       if (this.$refs.maxEpisodesInput) { | ||||
|         this.$refs.maxEpisodesInput.blur() | ||||
|       } | ||||
| 
 | ||||
|       if (this.maxEpisodesToDownload < 0) { | ||||
|         this.maxEpisodesToDownload = 3 | ||||
|         this.$toast.error('Invalid max episodes to download') | ||||
|         return | ||||
|       } | ||||
| 
 | ||||
|       this.checkingNewEpisodes = true | ||||
|       const lastEpisodeCheck = new Date(this.lastEpisodeCheckInput).valueOf() | ||||
| 
 | ||||
| @ -102,7 +120,7 @@ export default { | ||||
|       } | ||||
| 
 | ||||
|       this.$axios | ||||
|         .$get(`/api/podcasts/${this.libraryItemId}/checknew`) | ||||
|         .$get(`/api/podcasts/${this.libraryItemId}/checknew?limit=${this.maxEpisodesToDownload}`) | ||||
|         .then((response) => { | ||||
|           if (response.episodes && response.episodes.length) { | ||||
|             console.log('New episodes', response.episodes.length) | ||||
|  | ||||
| @ -5,7 +5,7 @@ | ||||
|         {{ label }}<em v-if="note" class="font-normal text-xs pl-2">{{ note }}</em> | ||||
|       </p> | ||||
|     </slot> | ||||
|     <ui-text-input ref="input" v-model="inputValue" :disabled="disabled" :readonly="readonly" :type="type" class="w-full" @blur="inputBlurred" /> | ||||
|     <ui-text-input ref="input" v-model="inputValue" :disabled="disabled" :readonly="readonly" :type="type" class="w-full" :class="inputClass" @blur="inputBlurred" /> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| @ -20,7 +20,8 @@ export default { | ||||
|       default: 'text' | ||||
|     }, | ||||
|     readonly: Boolean, | ||||
|     disabled: Boolean | ||||
|     disabled: Boolean, | ||||
|     inputClass: String | ||||
|   }, | ||||
|   data() { | ||||
|     return {} | ||||
|  | ||||
| @ -140,7 +140,9 @@ class PodcastController { | ||||
|       return res.status(500).send('Podcast has no rss feed url') | ||||
|     } | ||||
| 
 | ||||
|     var newEpisodes = await this.podcastManager.checkAndDownloadNewEpisodes(libraryItem) | ||||
|     const maxEpisodesToDownload = !isNaN(req.query.limit) ? Number(req.query.limit) : 3 | ||||
| 
 | ||||
|     var newEpisodes = await this.podcastManager.checkAndDownloadNewEpisodes(libraryItem, maxEpisodesToDownload) | ||||
|     res.json({ | ||||
|       episodes: newEpisodes || [] | ||||
|     }) | ||||
|  | ||||
| @ -221,7 +221,7 @@ class PodcastManager { | ||||
|     return libraryItem.media.autoDownloadEpisodes | ||||
|   } | ||||
| 
 | ||||
|   async checkPodcastForNewEpisodes(podcastLibraryItem, dateToCheckForEpisodesAfter) { | ||||
|   async checkPodcastForNewEpisodes(podcastLibraryItem, dateToCheckForEpisodesAfter, maxNewEpisodes = 3) { | ||||
|     if (!podcastLibraryItem.media.metadata.feedUrl) { | ||||
|       Logger.error(`[PodcastManager] checkPodcastForNewEpisodes no feed url for ${podcastLibraryItem.media.metadata.title} (ID: ${podcastLibraryItem.id})`) | ||||
|       return false | ||||
| @ -234,15 +234,18 @@ class PodcastManager { | ||||
| 
 | ||||
|     // Filter new and not already has
 | ||||
|     var newEpisodes = feed.episodes.filter(ep => ep.publishedAt > dateToCheckForEpisodesAfter && !podcastLibraryItem.media.checkHasEpisodeByFeedUrl(ep.enclosure.url)) | ||||
|     // Max new episodes for safety = 3
 | ||||
|     newEpisodes = newEpisodes.slice(0, 3) | ||||
| 
 | ||||
|     if (maxNewEpisodes > 0) { | ||||
|       newEpisodes = newEpisodes.slice(0, maxNewEpisodes) | ||||
|     } | ||||
| 
 | ||||
|     return newEpisodes | ||||
|   } | ||||
| 
 | ||||
|   async checkAndDownloadNewEpisodes(libraryItem) { | ||||
|   async checkAndDownloadNewEpisodes(libraryItem, maxEpisodesToDownload) { | ||||
|     const lastEpisodeCheckDate = new Date(libraryItem.media.lastEpisodeCheck || 0) | ||||
|     Logger.info(`[PodcastManager] checkAndDownloadNewEpisodes for "${libraryItem.media.metadata.title}" - Last episode check: ${lastEpisodeCheckDate}`) | ||||
|     var newEpisodes = await this.checkPodcastForNewEpisodes(libraryItem, libraryItem.media.lastEpisodeCheck) | ||||
|     var newEpisodes = await this.checkPodcastForNewEpisodes(libraryItem, libraryItem.media.lastEpisodeCheck, maxEpisodesToDownload) | ||||
|     if (newEpisodes.length) { | ||||
|       Logger.info(`[PodcastManager] Found ${newEpisodes.length} new episodes for podcast "${libraryItem.media.metadata.title}" - starting download`) | ||||
|       this.downloadPodcastEpisodes(libraryItem, newEpisodes, false) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user