mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	Update:Prefer epub ebook file when setting ebook #1825, validate ebookLocation
This commit is contained in:
		
							parent
							
								
									9547824aaa
								
							
						
					
					
						commit
						fde07d26e5
					
				@ -67,6 +67,12 @@ export default {
 | 
				
			|||||||
      if (!this.libraryItemId) return
 | 
					      if (!this.libraryItemId) return
 | 
				
			||||||
      return this.$store.getters['user/getUserMediaProgress'](this.libraryItemId)
 | 
					      return this.$store.getters['user/getUserMediaProgress'](this.libraryItemId)
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    savedEbookLocation() {
 | 
				
			||||||
 | 
					      if (!this.userMediaProgress?.ebookLocation) return null
 | 
				
			||||||
 | 
					      // Validate ebookLocation is an epubcfi
 | 
				
			||||||
 | 
					      if (!String(this.userMediaProgress.ebookLocation).startsWith('epubcfi')) return null
 | 
				
			||||||
 | 
					      return this.userMediaProgress.ebookLocation
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    localStorageLocationsKey() {
 | 
					    localStorageLocationsKey() {
 | 
				
			||||||
      return `ebookLocations-${this.libraryItemId}`
 | 
					      return `ebookLocations-${this.libraryItemId}`
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -197,7 +203,7 @@ export default {
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    /** @param {string} location - CFI of the new location */
 | 
					    /** @param {string} location - CFI of the new location */
 | 
				
			||||||
    relocated(location) {
 | 
					    relocated(location) {
 | 
				
			||||||
      if (this.userMediaProgress?.ebookLocation === location.start.cfi) {
 | 
					      if (this.savedEbookLocation === location.start.cfi) {
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -233,7 +239,7 @@ export default {
 | 
				
			|||||||
      })
 | 
					      })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // load saved progress
 | 
					      // load saved progress
 | 
				
			||||||
      reader.rendition.display(this.userMediaProgress?.ebookLocation || reader.book.locations.start)
 | 
					      reader.rendition.display(this.savedEbookLocation || reader.book.locations.start)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // load style
 | 
					      // load style
 | 
				
			||||||
      reader.rendition.themes.default({ '*': { color: '#fff!important', 'background-color': 'rgb(35 35 35)!important' } })
 | 
					      reader.rendition.themes.default({ '*': { color: '#fff!important', 'background-color': 'rgb(35 35 35)!important' } })
 | 
				
			||||||
 | 
				
			|||||||
@ -95,7 +95,9 @@ export default {
 | 
				
			|||||||
      return this.$store.getters['user/getUserMediaProgress'](this.libraryItemId)
 | 
					      return this.$store.getters['user/getUserMediaProgress'](this.libraryItemId)
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    savedPage() {
 | 
					    savedPage() {
 | 
				
			||||||
      return Number(this.userMediaProgress?.ebookLocation || 0)
 | 
					      // Validate ebookLocation is a number
 | 
				
			||||||
 | 
					      if (!this.userMediaProgress?.ebookLocation || isNaN(this.userMediaProgress.ebookLocation)) return 0
 | 
				
			||||||
 | 
					      return Number(this.userMediaProgress.ebookLocation)
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    pdfDocInitParams() {
 | 
					    pdfDocInitParams() {
 | 
				
			||||||
      return {
 | 
					      return {
 | 
				
			||||||
 | 
				
			|||||||
@ -437,16 +437,19 @@ class LibraryItem {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (this.mediaType === 'book') {
 | 
					    if (this.mediaType === 'book') {
 | 
				
			||||||
      // Add/update ebook file (ebooks that were removed are removed in checkScanData)
 | 
					      // Add/update ebook file (ebooks that were removed are removed in checkScanData)
 | 
				
			||||||
      this.libraryFiles.forEach((lf) => {
 | 
					      if (this.media.ebookFile) {
 | 
				
			||||||
        if (lf.fileType === 'ebook') {
 | 
					        const matchingLibraryFile = this.libraryFiles.find(lf => lf.ino === this.media.ebookFile.ino)
 | 
				
			||||||
          if (!this.media.ebookFile) {
 | 
					        if (matchingLibraryFile && this.media.ebookFile.updateFromLibraryFile(matchingLibraryFile)) {
 | 
				
			||||||
            this.media.setEbookFile(lf)
 | 
					 | 
				
			||||||
          hasUpdated = true
 | 
					          hasUpdated = true
 | 
				
			||||||
          } else if (this.media.ebookFile.ino == lf.ino && this.media.ebookFile.updateFromLibraryFile(lf)) { // Update existing ebookFile
 | 
					        }
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        // Prefer epub ebook then fallback to first other ebook file
 | 
				
			||||||
 | 
					        const ebookLibraryFile = this.libraryFiles.find(lf => lf.isEBookFile && lf.metadata.format === 'epub') || this.libraryFiles.find(lf => lf.isEBookFile)
 | 
				
			||||||
 | 
					        if (ebookLibraryFile) {
 | 
				
			||||||
 | 
					          this.media.setEbookFile(ebookLibraryFile)
 | 
				
			||||||
          hasUpdated = true
 | 
					          hasUpdated = true
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Set cover image if not set
 | 
					    // Set cover image if not set
 | 
				
			||||||
 | 
				
			|||||||
@ -50,6 +50,10 @@ class LibraryFile {
 | 
				
			|||||||
    return this.fileType === 'audio' || this.fileType === 'ebook' || this.fileType === 'video'
 | 
					    return this.fileType === 'audio' || this.fileType === 'ebook' || this.fileType === 'video'
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  get isEBookFile() {
 | 
				
			||||||
 | 
					    return this.fileType === 'ebook'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  get isOPFFile() {
 | 
					  get isOPFFile() {
 | 
				
			||||||
    return this.metadata.ext === '.opf'
 | 
					    return this.metadata.ext === '.opf'
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user