mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			209 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <div class="w-full h-full px-1 md:px-4 py-1 mb-4">
 | |
|     <div class="flex flex-wrap">
 | |
|       <div class="flex items-center p-2 w-full md:w-1/2">
 | |
|         <ui-toggle-switch v-model="useSquareBookCovers" size="sm" @input="formUpdated" />
 | |
|         <ui-tooltip :text="$strings.LabelSettingsSquareBookCoversHelp">
 | |
|           <p class="pl-4 text-sm">
 | |
|             {{ $strings.LabelSettingsSquareBookCovers }}
 | |
|             <span class="material-symbols icon-text text-sm">info</span>
 | |
|           </p>
 | |
|         </ui-tooltip>
 | |
|       </div>
 | |
|       <div class="p-2 w-full md:w-1/2">
 | |
|         <div class="flex items-center">
 | |
|           <ui-toggle-switch v-if="!globalWatcherDisabled" v-model="enableWatcher" size="sm" @input="formUpdated" />
 | |
|           <ui-toggle-switch v-else disabled size="sm" :value="false" />
 | |
|           <p class="pl-4 text-sm">{{ $strings.LabelSettingsEnableWatcherForLibrary }}</p>
 | |
|         </div>
 | |
|         <p v-if="globalWatcherDisabled" class="text-xs text-warning">*{{ $strings.MessageWatcherIsDisabledGlobally }}</p>
 | |
|       </div>
 | |
|       <div v-if="isBookLibrary" class="flex items-center p-2 w-full md:w-1/2">
 | |
|         <ui-toggle-switch v-model="audiobooksOnly" size="sm" @input="formUpdated" />
 | |
|         <ui-tooltip :text="$strings.LabelSettingsAudiobooksOnlyHelp">
 | |
|           <p class="pl-4 text-sm">
 | |
|             {{ $strings.LabelSettingsAudiobooksOnly }}
 | |
|             <span class="material-symbols icon-text text-sm">info</span>
 | |
|           </p>
 | |
|         </ui-tooltip>
 | |
|       </div>
 | |
|       <div v-if="isBookLibrary" class="p-2 w-full md:w-1/2">
 | |
|         <div class="flex items-center">
 | |
|           <ui-toggle-switch v-model="skipMatchingMediaWithAsin" size="sm" @input="formUpdated" />
 | |
|           <p class="pl-4 text-sm">{{ $strings.LabelSettingsSkipMatchingBooksWithASIN }}</p>
 | |
|         </div>
 | |
|       </div>
 | |
|       <div v-if="isBookLibrary" class="p-2 w-full md:w-1/2">
 | |
|         <div class="flex items-center">
 | |
|           <ui-toggle-switch v-model="skipMatchingMediaWithIsbn" size="sm" @input="formUpdated" />
 | |
|           <p class="pl-4 text-sm">{{ $strings.LabelSettingsSkipMatchingBooksWithISBN }}</p>
 | |
|         </div>
 | |
|       </div>
 | |
|       <div v-if="isBookLibrary" class="p-2 w-full md:w-1/2">
 | |
|         <div class="flex items-center">
 | |
|           <ui-toggle-switch v-model="hideSingleBookSeries" size="sm" @input="formUpdated" />
 | |
|           <ui-tooltip :text="$strings.LabelSettingsHideSingleBookSeriesHelp">
 | |
|             <p class="pl-4 text-sm">
 | |
|               {{ $strings.LabelSettingsHideSingleBookSeries }}
 | |
|               <span class="material-symbols icon-text text-sm">info</span>
 | |
|             </p>
 | |
|           </ui-tooltip>
 | |
|         </div>
 | |
|       </div>
 | |
|       <div v-if="isBookLibrary" class="p-2 w-full md:w-1/2">
 | |
|         <div class="flex items-center">
 | |
|           <ui-toggle-switch v-model="onlyShowLaterBooksInContinueSeries" size="sm" @input="formUpdated" />
 | |
|           <ui-tooltip :text="$strings.LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp">
 | |
|             <p class="pl-4 text-sm">
 | |
|               {{ $strings.LabelSettingsOnlyShowLaterBooksInContinueSeries }}
 | |
|               <span class="material-symbols icon-text text-sm">info</span>
 | |
|             </p>
 | |
|           </ui-tooltip>
 | |
|         </div>
 | |
|       </div>
 | |
|       <div v-if="isBookLibrary" class="p-2 w-full md:w-1/2">
 | |
|         <div class="flex items-center">
 | |
|           <ui-toggle-switch v-model="epubsAllowScriptedContent" size="sm" @input="formUpdated" />
 | |
|           <ui-tooltip :text="$strings.LabelSettingsEpubsAllowScriptedContentHelp">
 | |
|             <p class="pl-4 text-sm">
 | |
|               {{ $strings.LabelSettingsEpubsAllowScriptedContent }}
 | |
|               <span class="material-symbols icon-text text-sm">info</span>
 | |
|             </p>
 | |
|           </ui-tooltip>
 | |
|         </div>
 | |
|       </div>
 | |
|       <div v-if="isPodcastLibrary" class="p-2 w-full md:w-1/2">
 | |
|         <ui-dropdown :label="$strings.LabelPodcastSearchRegion" v-model="podcastSearchRegion" :items="$podcastSearchRegionOptions" small class="max-w-72" menu-max-height="200px" @input="formUpdated" />
 | |
|       </div>
 | |
|       <div class="p-2 w-full flex items-center space-x-2 flex-wrap">
 | |
|         <div>
 | |
|           <ui-dropdown v-model="markAsFinishedWhen" :items="maskAsFinishedWhenItems" :label="$strings.LabelSettingsLibraryMarkAsFinishedWhen" small class="w-72 min-w-72 text-sm" menu-max-height="200px" @input="markAsFinishedWhenChanged" />
 | |
|         </div>
 | |
|         <div class="w-16">
 | |
|           <div>
 | |
|             <label class="px-1 text-sm font-semibold"></label>
 | |
|             <div class="relative">
 | |
|               <ui-text-input v-model="markAsFinishedValue" type="number" label="" no-spinner custom-input-class="pr-5" @input="markAsFinishedChanged" />
 | |
|               <div class="absolute top-0 bottom-0 right-4 flex items-center">{{ markAsFinishedWhen === 'timeRemaining' ? '' : '%' }}</div>
 | |
|             </div>
 | |
|           </div>
 | |
|         </div>
 | |
|       </div>
 | |
|     </div>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| export default {
 | |
|   props: {
 | |
|     library: {
 | |
|       type: Object,
 | |
|       default: () => null
 | |
|     },
 | |
|     processing: Boolean
 | |
|   },
 | |
|   data() {
 | |
|     return {
 | |
|       provider: null,
 | |
|       useSquareBookCovers: false,
 | |
|       enableWatcher: false,
 | |
|       skipMatchingMediaWithAsin: false,
 | |
|       skipMatchingMediaWithIsbn: false,
 | |
|       audiobooksOnly: false,
 | |
|       epubsAllowScriptedContent: false,
 | |
|       hideSingleBookSeries: false,
 | |
|       onlyShowLaterBooksInContinueSeries: false,
 | |
|       podcastSearchRegion: 'us',
 | |
|       markAsFinishedWhen: 'timeRemaining',
 | |
|       markAsFinishedValue: 10
 | |
|     }
 | |
|   },
 | |
|   computed: {
 | |
|     librarySettings() {
 | |
|       return this.library.settings || {}
 | |
|     },
 | |
|     globalWatcherDisabled() {
 | |
|       return this.$store.getters['getServerSetting']('scannerDisableWatcher')
 | |
|     },
 | |
|     mediaType() {
 | |
|       return this.library.mediaType
 | |
|     },
 | |
|     isBookLibrary() {
 | |
|       return this.mediaType === 'book'
 | |
|     },
 | |
|     isPodcastLibrary() {
 | |
|       return this.mediaType === 'podcast'
 | |
|     },
 | |
|     providers() {
 | |
|       if (this.mediaType === 'podcast') return this.$store.state.scanners.podcastProviders
 | |
|       return this.$store.state.scanners.providers
 | |
|     },
 | |
|     maskAsFinishedWhenItems() {
 | |
|       return [
 | |
|         {
 | |
|           text: this.$strings.LabelSettingsLibraryMarkAsFinishedTimeRemaining,
 | |
|           value: 'timeRemaining'
 | |
|         },
 | |
|         {
 | |
|           text: this.$strings.LabelSettingsLibraryMarkAsFinishedPercentComplete,
 | |
|           value: 'percentComplete'
 | |
|         }
 | |
|       ]
 | |
|     }
 | |
|   },
 | |
|   methods: {
 | |
|     markAsFinishedWhenChanged(val) {
 | |
|       if (val === 'percentComplete' && this.markAsFinishedValue > 100) {
 | |
|         this.markAsFinishedValue = 100
 | |
|       }
 | |
|       this.formUpdated()
 | |
|     },
 | |
|     markAsFinishedChanged(val) {
 | |
|       this.formUpdated()
 | |
|     },
 | |
|     getLibraryData() {
 | |
|       let markAsFinishedTimeRemaining = this.markAsFinishedWhen === 'timeRemaining' ? Number(this.markAsFinishedValue) : null
 | |
|       let markAsFinishedPercentComplete = this.markAsFinishedWhen === 'percentComplete' ? Number(this.markAsFinishedValue) : null
 | |
| 
 | |
|       return {
 | |
|         settings: {
 | |
|           coverAspectRatio: this.useSquareBookCovers ? this.$constants.BookCoverAspectRatio.SQUARE : this.$constants.BookCoverAspectRatio.STANDARD,
 | |
|           disableWatcher: !this.enableWatcher,
 | |
|           skipMatchingMediaWithAsin: !!this.skipMatchingMediaWithAsin,
 | |
|           skipMatchingMediaWithIsbn: !!this.skipMatchingMediaWithIsbn,
 | |
|           audiobooksOnly: !!this.audiobooksOnly,
 | |
|           epubsAllowScriptedContent: !!this.epubsAllowScriptedContent,
 | |
|           hideSingleBookSeries: !!this.hideSingleBookSeries,
 | |
|           onlyShowLaterBooksInContinueSeries: !!this.onlyShowLaterBooksInContinueSeries,
 | |
|           podcastSearchRegion: this.podcastSearchRegion,
 | |
|           markAsFinishedTimeRemaining: markAsFinishedTimeRemaining,
 | |
|           markAsFinishedPercentComplete: markAsFinishedPercentComplete
 | |
|         }
 | |
|       }
 | |
|     },
 | |
|     formUpdated() {
 | |
|       this.$emit('update', this.getLibraryData())
 | |
|     },
 | |
|     init() {
 | |
|       this.useSquareBookCovers = this.librarySettings.coverAspectRatio === this.$constants.BookCoverAspectRatio.SQUARE
 | |
|       this.enableWatcher = !this.librarySettings.disableWatcher
 | |
|       this.skipMatchingMediaWithAsin = !!this.librarySettings.skipMatchingMediaWithAsin
 | |
|       this.skipMatchingMediaWithIsbn = !!this.librarySettings.skipMatchingMediaWithIsbn
 | |
|       this.audiobooksOnly = !!this.librarySettings.audiobooksOnly
 | |
|       this.epubsAllowScriptedContent = !!this.librarySettings.epubsAllowScriptedContent
 | |
|       this.hideSingleBookSeries = !!this.librarySettings.hideSingleBookSeries
 | |
|       this.onlyShowLaterBooksInContinueSeries = !!this.librarySettings.onlyShowLaterBooksInContinueSeries
 | |
|       this.podcastSearchRegion = this.librarySettings.podcastSearchRegion || 'us'
 | |
|       this.markAsFinishedWhen = this.librarySettings.markAsFinishedTimeRemaining ? 'timeRemaining' : 'percentComplete'
 | |
|       if (!this.librarySettings.markAsFinishedTimeRemaining && !this.librarySettings.markAsFinishedPercentComplete) {
 | |
|         this.markAsFinishedWhen = 'timeRemaining'
 | |
|       }
 | |
|       this.markAsFinishedValue = this.librarySettings.markAsFinishedTimeRemaining || this.librarySettings.markAsFinishedPercentComplete || 10
 | |
|     }
 | |
|   },
 | |
|   mounted() {
 | |
|     this.init()
 | |
|   }
 | |
| }
 | |
| </script>
 |