mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-11-04 03:17:00 -05:00 
			
		
		
		
	remove clientside changes
This commit is contained in:
		
							parent
							
								
									d43d351721
								
							
						
					
					
						commit
						3279901ab0
					
				@ -22,16 +22,6 @@
 | 
				
			|||||||
          <div class="w-40" />
 | 
					          <div class="w-40" />
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <div class="w-full max-w-3xl py-4" v-if="overdriveMediaMarkersExist">
 | 
					 | 
				
			||||||
          <div class="flex items-center">
 | 
					 | 
				
			||||||
            <p class="text-sm mb-4">Overdrive Media Markers Found! Would you like to generate chapter data from them?</p>
 | 
					 | 
				
			||||||
            <div class="flex-grow" />
 | 
					 | 
				
			||||||
              <ui-btn color="primary" small class="mx-2" @click="this.generateChaptersFromOverdriveMediaMarkers">Yes</ui-btn>
 | 
					 | 
				
			||||||
              <!-- <ui-btn color="error" small @click="saveChapters">No</ui-btn> -->
 | 
					 | 
				
			||||||
            <div class="w-40" />
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <div class="flex text-xs uppercase text-gray-300 font-semibold mb-2">
 | 
					        <div class="flex text-xs uppercase text-gray-300 font-semibold mb-2">
 | 
				
			||||||
          <div class="w-12"></div>
 | 
					          <div class="w-12"></div>
 | 
				
			||||||
          <div class="w-32 px-2">Start</div>
 | 
					          <div class="w-32 px-2">Start</div>
 | 
				
			||||||
@ -95,7 +85,6 @@
 | 
				
			|||||||
              <span v-if="(track.chapters || []).length" class="material-icons text-success text-sm">check</span>
 | 
					              <span v-if="(track.chapters || []).length" class="material-icons text-success text-sm">check</span>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          
 | 
					 | 
				
			||||||
        </template>
 | 
					        </template>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
@ -179,7 +168,6 @@ export default {
 | 
				
			|||||||
      asinInput: null,
 | 
					      asinInput: null,
 | 
				
			||||||
      findingChapters: false,
 | 
					      findingChapters: false,
 | 
				
			||||||
      showFindChaptersModal: false,
 | 
					      showFindChaptersModal: false,
 | 
				
			||||||
      showImportOverdriveMediaMarkersModal: false,
 | 
					 | 
				
			||||||
      chapterData: null
 | 
					      chapterData: null
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
@ -202,12 +190,6 @@ export default {
 | 
				
			|||||||
    mediaDuration() {
 | 
					    mediaDuration() {
 | 
				
			||||||
      return this.media.duration
 | 
					      return this.media.duration
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    overdriveMediaMarkersExist() {
 | 
					 | 
				
			||||||
      return (this.overdriveMediaMarkers?.length > 0 ? true : false ) || false
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    overdriveMediaMarkers() {
 | 
					 | 
				
			||||||
      return this.audioFiles.map((af) => af.metaTags.tagOverdriveMediaMarker).filter(notUndefined => notUndefined !== undefined) || []
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    chapters() {
 | 
					    chapters() {
 | 
				
			||||||
      return this.media.chapters || []
 | 
					      return this.media.chapters || []
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -225,13 +207,6 @@ export default {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  methods: {
 | 
					  methods: {
 | 
				
			||||||
    checkForOverdriveMediaMarkers() {
 | 
					 | 
				
			||||||
      if (this.overdriveMediaMarkersExist) {
 | 
					 | 
				
			||||||
        this.$toast.success('Your book has overdrive media markers!')
 | 
					 | 
				
			||||||
      } else {
 | 
					 | 
				
			||||||
        this.$toast.error('Your book DOES NOT have overdrive media markers!')
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    editItem() {
 | 
					    editItem() {
 | 
				
			||||||
      this.$store.commit('showEditModal', this.libraryItem)
 | 
					      this.$store.commit('showEditModal', this.libraryItem)
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -417,7 +392,7 @@ export default {
 | 
				
			|||||||
            this.$toast.error(data.error)
 | 
					            this.$toast.error(data.error)
 | 
				
			||||||
            this.showFindChaptersModal = false
 | 
					            this.showFindChaptersModal = false
 | 
				
			||||||
          } else {
 | 
					          } else {
 | 
				
			||||||
            console.log('Chapter data', JSON.stringify(data))
 | 
					            console.log('Chapter data', data)
 | 
				
			||||||
            this.chapterData = data
 | 
					            this.chapterData = data
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
@ -427,100 +402,9 @@ export default {
 | 
				
			|||||||
          this.$toast.error('Failed to find chapters')
 | 
					          this.$toast.error('Failed to find chapters')
 | 
				
			||||||
          this.showFindChaptersModal = false
 | 
					          this.showFindChaptersModal = false
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    // overdrive
 | 
					 | 
				
			||||||
    generateChaptersFromOverdriveMediaMarkers() {
 | 
					 | 
				
			||||||
      var parseString = require('xml2js').parseString; // function to convert xml to JSON
 | 
					 | 
				
			||||||
      var overdriveMediaMarkers = this.overdriveMediaMarkers // an array of XML. 1 Part.mp3 to 1 array index. Each index holds 1 XML that holds multiple chapters
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      var parsedOverdriveMediaMarkers = [] // an array of objects. each object being a chapter with a name and time key. the values are arrays of strings
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      overdriveMediaMarkers.forEach(function (item, index) {     
 | 
					 | 
				
			||||||
        var parsed_result
 | 
					 | 
				
			||||||
        parseString(item, function (err, result) {
 | 
					 | 
				
			||||||
          // result.Markers.Marker is the result of parsing the XML for the MediaMarker tags for the MP3 file (Part##.mp3)
 | 
					 | 
				
			||||||
          // it is shaped like this:
 | 
					 | 
				
			||||||
          // [
 | 
					 | 
				
			||||||
          //   {
 | 
					 | 
				
			||||||
          //     "Name": [
 | 
					 | 
				
			||||||
          //       "Chapter 1:  "
 | 
					 | 
				
			||||||
          //     ],
 | 
					 | 
				
			||||||
          //     "Time": [
 | 
					 | 
				
			||||||
          //       "0:00.000"
 | 
					 | 
				
			||||||
          //     ]
 | 
					 | 
				
			||||||
          //   },
 | 
					 | 
				
			||||||
          //   {
 | 
					 | 
				
			||||||
          //     "Name": [
 | 
					 | 
				
			||||||
          //       "Chapter 2: "
 | 
					 | 
				
			||||||
          //     ],
 | 
					 | 
				
			||||||
          //     "Time": [
 | 
					 | 
				
			||||||
          //       "15:51.000"
 | 
					 | 
				
			||||||
          //     ]
 | 
					 | 
				
			||||||
          //   }
 | 
					 | 
				
			||||||
          // ]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          parsed_result = result.Markers.Marker
 | 
					 | 
				
			||||||
          
 | 
					 | 
				
			||||||
          // The values for Name and Time in parsed_results are returned as Arrays from parseString
 | 
					 | 
				
			||||||
          // update them to be strings
 | 
					 | 
				
			||||||
          parsed_result.forEach((item, index) => {
 | 
					 | 
				
			||||||
            Object.keys(item).forEach(key => {
 | 
					 | 
				
			||||||
              item[key] = item[key].toString()
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
          })
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        parsedOverdriveMediaMarkers.push(parsed_result)
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      // go from an array of arrays of objects to an array of objects
 | 
					 | 
				
			||||||
      // end result looks like:
 | 
					 | 
				
			||||||
      // [
 | 
					 | 
				
			||||||
      //   {
 | 
					 | 
				
			||||||
      //     "Name": "Chapter 1:  The Worst Birthday",
 | 
					 | 
				
			||||||
      //     "Time": "0:00.000"
 | 
					 | 
				
			||||||
      //   },
 | 
					 | 
				
			||||||
      //   {
 | 
					 | 
				
			||||||
      //     "Name": "Chapter 2:  Dobby's Warning",
 | 
					 | 
				
			||||||
      //     "Time": "15:51.000"
 | 
					 | 
				
			||||||
      //   },
 | 
					 | 
				
			||||||
      //   { redacted }
 | 
					 | 
				
			||||||
      // ]
 | 
					 | 
				
			||||||
      parsedOverdriveMediaMarkers = parsedOverdriveMediaMarkers
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      var index = 0
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      var time = 0.0
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      // actually generate the chapter object
 | 
					 | 
				
			||||||
      // logic ported over from benonymity's OverdriveChapterizer:
 | 
					 | 
				
			||||||
      //    https://github.com/benonymity/OverdriveChapterizer/blob/main/chapters.py
 | 
					 | 
				
			||||||
      var length = 0.0
 | 
					 | 
				
			||||||
      var newOChapters = []
 | 
					 | 
				
			||||||
      this.audioTracks.forEach((track, track_index) => {
 | 
					 | 
				
			||||||
        parsedOverdriveMediaMarkers[track_index].forEach((chapter) => {
 | 
					 | 
				
			||||||
          time = chapter.Time.split(":")
 | 
					 | 
				
			||||||
          time = length + parseFloat(time[0]) * 60 + parseFloat(time[1])
 | 
					 | 
				
			||||||
          newOChapters.push(
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
              id: index++,
 | 
					 | 
				
			||||||
              start: time,
 | 
					 | 
				
			||||||
              end: length,
 | 
					 | 
				
			||||||
              title: chapter.Name
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
          )
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
        length += track.duration
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      this.newChapters = newOChapters
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					 | 
				
			||||||
  mounted() {
 | 
					  mounted() {
 | 
				
			||||||
    this.checkForOverdriveMediaMarkers()
 | 
					 | 
				
			||||||
    var dismissed = false
 | 
					 | 
				
			||||||
    this.asinInput = this.mediaMetadata.asin || null
 | 
					    this.asinInput = this.mediaMetadata.asin || null
 | 
				
			||||||
    this.newChapters = this.chapters.map((c) => ({ ...c }))
 | 
					    this.newChapters = this.chapters.map((c) => ({ ...c }))
 | 
				
			||||||
    if (!this.newChapters.length) {
 | 
					    if (!this.newChapters.length) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user