Update:Prefer epub ebook file when setting ebook #1825, validate ebookLocation

This commit is contained in:
advplyr 2023-06-06 16:53:11 -05:00
parent 9547824aaa
commit fde07d26e5
4 changed files with 27 additions and 12 deletions

View File

@ -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' } })

View File

@ -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 {

View File

@ -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
hasUpdated = true
}
} }
}) } 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
}
}
} }
// Set cover image if not set // Set cover image if not set

View File

@ -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'
} }