mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-31 10:27:01 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <div class="w-full">
 | |
|     <div v-if="missingParts.length" class="bg-error border-red-800 shadow-md p-4">
 | |
|       <p class="text-sm mb-2">
 | |
|         {{ $strings.LabelMissingParts }} <span class="text-sm">({{ missingParts.length }})</span>
 | |
|       </p>
 | |
|       <p class="text-sm font-mono">{{ missingPartChunks.join(', ') }}</p>
 | |
|     </div>
 | |
| 
 | |
|     <div v-if="invalidParts.length" class="bg-error border-red-800 shadow-md p-4">
 | |
|       <p class="text-sm mb-2">
 | |
|         {{ $strings.LabelInvalidParts }} <span class="text-sm">({{ invalidParts.length }})</span>
 | |
|       </p>
 | |
|       <div>
 | |
|         <p v-for="part in invalidParts" :key="part.filename" class="text-sm font-mono">{{ part.filename }}: {{ part.error }}</p>
 | |
|       </div>
 | |
|     </div>
 | |
| 
 | |
|     <tables-tracks-table :title="$strings.LabelStatsAudioTracks" :tracks="tracksWithAudioFile" :is-file="isFile" :library-item-id="libraryItemId" class="mt-6" />
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| export default {
 | |
|   props: {
 | |
|     libraryItemId: String,
 | |
|     media: {
 | |
|       type: Object,
 | |
|       default: () => {}
 | |
|     },
 | |
|     isFile: Boolean
 | |
|   },
 | |
|   data() {
 | |
|     return {}
 | |
|   },
 | |
|   computed: {
 | |
|     tracksWithAudioFile() {
 | |
|       return this.media.tracks.map((track) => {
 | |
|         track.audioFile = this.media.audioFiles.find((af) => af.metadata.path === track.metadata.path)
 | |
|         return track
 | |
|       })
 | |
|     },
 | |
|     missingPartChunks() {
 | |
|       if (this.missingParts === 1) return this.missingParts[0]
 | |
|       var chunks = []
 | |
| 
 | |
|       var currentIndex = this.missingParts[0]
 | |
|       var currentChunk = [this.missingParts[0]]
 | |
| 
 | |
|       for (let i = 1; i < this.missingParts.length; i++) {
 | |
|         var partIndex = this.missingParts[i]
 | |
|         if (currentIndex === partIndex - 1) {
 | |
|           currentChunk.push(partIndex)
 | |
|           currentIndex = partIndex
 | |
|         } else {
 | |
|           // console.log('Chunk ended', currentChunk.join(', '), currentIndex, partIndex)
 | |
|           if (currentChunk.length === 0) {
 | |
|             console.error('How is current chunk 0?', currentChunk.join(', '))
 | |
|           }
 | |
|           chunks.push(currentChunk)
 | |
|           currentChunk = [partIndex]
 | |
|           currentIndex = partIndex
 | |
|         }
 | |
|       }
 | |
|       if (currentChunk.length) {
 | |
|         chunks.push(currentChunk)
 | |
|       }
 | |
|       chunks = chunks.map((chunk) => {
 | |
|         if (chunk.length === 1) return chunk[0]
 | |
|         else return `${chunk[0]}-${chunk[chunk.length - 1]}`
 | |
|       })
 | |
|       return chunks
 | |
|     },
 | |
|     missingParts() {
 | |
|       return this.media.missingParts || []
 | |
|     },
 | |
|     invalidParts() {
 | |
|       return this.media.invalidParts || []
 | |
|     }
 | |
|   },
 | |
|   methods: {},
 | |
|   mounted() {}
 | |
| }
 | |
| </script> |