mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	Merge pull request #1534 from mfcar/fixExplicitInfo
Fixed explicit/language info import and added Explicit indicator
This commit is contained in:
		
						commit
						ec7e965dfa
					
				| @ -28,7 +28,7 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|       <div v-else class="px-4 flex-grow"> | ||||
|         <h1>{{ book.title }}</h1> | ||||
|         <h1>{{ book.title }}<widgets-explicit-indicator :explicit="book.explicit" /></h1> | ||||
|         <p class="text-base text-gray-300 whitespace-nowrap truncate">by {{ book.author }}</p> | ||||
|         <p v-if="book.genres" class="text-xs text-gray-400 leading-5">{{ book.genres.join(', ') }}</p> | ||||
|         <p class="text-xs text-gray-400 leading-5">{{ book.trackCount }} Episodes</p> | ||||
| @ -78,4 +78,4 @@ export default { | ||||
|     this.selectedCover = this.bookCovers.length ? this.bookCovers[0] : this.book.cover || null | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| </script> | ||||
|  | ||||
| @ -8,7 +8,7 @@ | ||||
|     <!-- Alternative bookshelf title/author/sort --> | ||||
|     <div v-if="isAlternativeBookshelfView || isAuthorBookshelfView" class="absolute left-0 z-50 w-full" :style="{ bottom: `-${titleDisplayBottomOffset}rem` }"> | ||||
|       <p class="truncate" :style="{ fontSize: 0.9 * sizeMultiplier + 'rem' }"> | ||||
|         {{ displayTitle }} | ||||
|         {{ displayTitle }}<widgets-explicit-indicator :explicit="isExplicit" /> | ||||
|       </p> | ||||
|       <p class="truncate text-gray-400" :style="{ fontSize: 0.8 * sizeMultiplier + 'rem' }">{{ displayLineTwo || ' ' }}</p> | ||||
|       <p v-if="displaySortLine" class="truncate text-gray-400" :style="{ fontSize: 0.8 * sizeMultiplier + 'rem' }">{{ displaySortLine }}</p> | ||||
| @ -193,6 +193,9 @@ export default { | ||||
|     isMusic() { | ||||
|       return this.mediaType === 'music' | ||||
|     }, | ||||
|     isExplicit() { | ||||
|       return this.mediaMetadata.explicit || false | ||||
|     }, | ||||
|     placeholderUrl() { | ||||
|       const config = this.$config || this.$nuxt.$config | ||||
|       return `${config.routerBasePath}/book_placeholder.jpg` | ||||
|  | ||||
| @ -164,6 +164,13 @@ | ||||
|             <p v-if="mediaMetadata.releaseDate" class="text-xs ml-1 text-white text-opacity-60">{{ $strings.LabelCurrently }} {{ mediaMetadata.releaseDate || '' }}</p> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div v-if="selectedMatchOrig.explicit != null" class="flex items-center py-2"> | ||||
|           <ui-checkbox v-model="selectedMatchUsage.explicit" checkbox-bg="bg" @input="checkboxToggled" /> | ||||
|           <div class="flex-grow ml-4"> | ||||
|             <ui-checkbox v-model="selectedMatch.explicit" :label="$strings.LabelExplicit" checkbox-bg="primary" border-color="gray-600" label-class="pl-2 text-base font-semibold" /> | ||||
|             <p v-if="mediaMetadata.explicit != null" class="text-xs ml-1 text-white text-opacity-60">{{ $strings.LabelCurrently }} {{ mediaMetadata.explicit ? 'Explicit (checked)' : 'Not Explicit (unchecked)' }}</p> | ||||
|           </div> | ||||
|         </div> | ||||
| 
 | ||||
|         <div class="flex items-center justify-end py-2"> | ||||
|           <ui-btn color="success" type="submit">{{ $strings.ButtonSubmit }}</ui-btn> | ||||
| @ -327,6 +334,7 @@ export default { | ||||
|           res.itunesPageUrl = res.pageUrl || null | ||||
|           res.itunesId = res.id || null | ||||
|           res.author = res.artistName || null | ||||
|           res.explicit = res.explicit || false | ||||
|           return res | ||||
|         }) | ||||
|       } | ||||
|  | ||||
| @ -28,6 +28,14 @@ | ||||
|             <ui-multi-select v-model="podcast.genres" :items="podcast.genres" :label="$strings.LabelGenres" /> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="flex flex-wrap"> | ||||
|           <div class="w-full md:w-1/2 p-2"> | ||||
|             <ui-text-input-with-label v-model="podcast.language" :label="$strings.LabelLanguage" /> | ||||
|           </div> | ||||
|           <div class="flex-grow px-1 pt-6"> | ||||
|             <ui-checkbox v-model="podcast.explicit" :label="$strings.LabelExplicit" checkbox-bg="primary" border-color="gray-600" label-class="pl-2 text-base font-semibold" /> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="p-2 w-full"> | ||||
|           <ui-textarea-with-label v-model="podcast.description" :label="$strings.LabelDescription" :rows="3" /> | ||||
|         </div> | ||||
| @ -82,7 +90,9 @@ export default { | ||||
|         itunesPageUrl: '', | ||||
|         itunesId: '', | ||||
|         itunesArtistId: '', | ||||
|         autoDownloadEpisodes: false | ||||
|         autoDownloadEpisodes: false, | ||||
|         language: '', | ||||
|         explicit: false | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
| @ -170,7 +180,8 @@ export default { | ||||
|             itunesPageUrl: this.podcast.itunesPageUrl, | ||||
|             itunesId: this.podcast.itunesId, | ||||
|             itunesArtistId: this.podcast.itunesArtistId, | ||||
|             language: this.podcast.language | ||||
|             language: this.podcast.language, | ||||
|             explicit: this.podcast.explicit | ||||
|           }, | ||||
|           autoDownloadEpisodes: this.podcast.autoDownloadEpisodes | ||||
|         } | ||||
| @ -205,9 +216,10 @@ export default { | ||||
|       this.podcast.itunesPageUrl = this._podcastData.pageUrl || '' | ||||
|       this.podcast.itunesId = this._podcastData.id || '' | ||||
|       this.podcast.itunesArtistId = this._podcastData.artistId || '' | ||||
|       this.podcast.language = this._podcastData.language || '' | ||||
|       this.podcast.language = this._podcastData.language || this.feedMetadata.language || '' | ||||
|       this.podcast.autoDownloadEpisodes = false | ||||
| 
 | ||||
|       this.podcast.explicit = this._podcastData.explicit || this.feedMetadata.explicit === 'yes' || this.feedMetadata.explicit == 'true' | ||||
|       if (this.folderItems[0]) { | ||||
|         this.selectedFolderId = this.folderItems[0].value | ||||
|         this.folderUpdated() | ||||
| @ -226,4 +238,4 @@ export default { | ||||
| #episodes-scroll { | ||||
|   max-height: calc(80vh - 200px); | ||||
| } | ||||
| </style> | ||||
| </style> | ||||
|  | ||||
							
								
								
									
										17
									
								
								client/components/widgets/ExplicitIndicator.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								client/components/widgets/ExplicitIndicator.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | ||||
| <template> | ||||
|   <span v-if="explicit" class="material-icons ml-1" style="font-size: 0.8rem">explicit</span> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| export default { | ||||
|   props: { | ||||
|     explicit: Boolean | ||||
|   }, | ||||
|   data() { | ||||
|     return {} | ||||
|   }, | ||||
|   computed: {}, | ||||
|   methods: {}, | ||||
|   mounted() {} | ||||
| } | ||||
| </script> | ||||
| @ -25,7 +25,7 @@ | ||||
|           <div class="flex justify-center"> | ||||
|             <div class="mb-4"> | ||||
|               <h1 class="text-2xl md:text-3xl font-semibold"> | ||||
|                 {{ title }} | ||||
|                 {{ title }}<widgets-explicit-indicator :explicit="isExplicit" /> | ||||
|               </h1> | ||||
| 
 | ||||
|               <p v-if="bookSubtitle" class="text-gray-200 text-xl md:text-2xl">{{ bookSubtitle }}</p> | ||||
| @ -315,6 +315,9 @@ export default { | ||||
|     isInvalid() { | ||||
|       return this.libraryItem.isInvalid | ||||
|     }, | ||||
|     isExplicit() { | ||||
|       return this.mediaMetadata.explicit || false; | ||||
|     }, | ||||
|     invalidAudioFiles() { | ||||
|       if (!this.isBook) return [] | ||||
|       return this.libraryItem.media.audioFiles.filter((af) => af.invalid) | ||||
|  | ||||
| @ -14,14 +14,14 @@ | ||||
|               <div class="flex md:hidden mb-2"> | ||||
|                 <covers-preview-cover :src="$store.getters['globals/getLibraryItemCoverSrcById'](episode.libraryItemId)" :width="48" :book-cover-aspect-ratio="bookCoverAspectRatio" :show-resolution="false" class="md:hidden" /> | ||||
|                 <div class="flex-grow px-2"> | ||||
|                   <nuxt-link :to="`/item/${episode.libraryItemId}`" class="text-sm text-gray-200 hover:underline">{{ episode.podcast.metadata.title }}</nuxt-link> | ||||
|                   <nuxt-link :to="`/item/${episode.libraryItemId}`" class="text-sm text-gray-200 hover:underline">{{ episode.podcast.metadata.title }}</nuxt-link><widgets-explicit-indicator :explicit="episode.podcast.metadata.explicit" /> | ||||
| 
 | ||||
|                   <p class="text-xs text-gray-300 mb-1">{{ $dateDistanceFromNow(episode.publishedAt) }}</p> | ||||
|                 </div> | ||||
|               </div> | ||||
|               <!-- desktop --> | ||||
|               <div class="hidden md:block"> | ||||
|                 <nuxt-link :to="`/item/${episode.libraryItemId}`" class="text-sm text-gray-200 hover:underline">{{ episode.podcast.metadata.title }}</nuxt-link> | ||||
|                 <nuxt-link :to="`/item/${episode.libraryItemId}`" class="text-sm text-gray-200 hover:underline">{{ episode.podcast.metadata.title }}</nuxt-link><widgets-explicit-indicator :explicit="episode.podcast.metadata.explicit" /> | ||||
| 
 | ||||
|                 <p class="text-xs text-gray-300 mb-1">{{ $dateDistanceFromNow(episode.publishedAt) }}</p> | ||||
|               </div> | ||||
| @ -206,4 +206,4 @@ export default { | ||||
|     this.loadRecentEpisodes() | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| </script> | ||||
|  | ||||
| @ -20,7 +20,7 @@ | ||||
|               <img v-if="podcast.cover" :src="podcast.cover" class="h-full w-full" /> | ||||
|             </div> | ||||
|             <div class="flex-grow pl-4 max-w-2xl"> | ||||
|               <a :href="podcast.pageUrl" class="text-base md:text-lg text-gray-200 hover:underline" target="_blank" @click.stop>{{ podcast.title }}</a> | ||||
|               <a :href="podcast.pageUrl" class="text-base md:text-lg text-gray-200 hover:underline" target="_blank" @click.stop>{{ podcast.title }}</a><widgets-explicit-indicator :explicit="podcast.explicit" /> | ||||
|               <p class="text-sm md:text-base text-gray-300 whitespace-nowrap truncate">by {{ podcast.artistName }}</p> | ||||
|               <p class="text-xs text-gray-400 leading-5">{{ podcast.genres.join(', ') }}</p> | ||||
|               <p class="text-xs text-gray-400 leading-5">{{ podcast.trackCount }} {{ $strings.HeaderEpisodes }}</p> | ||||
| @ -171,4 +171,4 @@ export default { | ||||
|   }, | ||||
|   mounted() {} | ||||
| } | ||||
| </script> | ||||
| </script> | ||||
|  | ||||
| @ -95,7 +95,8 @@ class iTunes { | ||||
|       cover: this.getCoverArtwork(data), | ||||
|       trackCount: data.trackCount, | ||||
|       feedUrl: data.feedUrl, | ||||
|       pageUrl: data.collectionViewUrl | ||||
|       pageUrl: data.collectionViewUrl, | ||||
|       explicit: data.trackExplicitness === 'explicit' | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| @ -105,4 +106,4 @@ class iTunes { | ||||
|     }) | ||||
|   } | ||||
| } | ||||
| module.exports = iTunes | ||||
| module.exports = iTunes | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user