Fix URL encoding, fix download m4b cover art

This commit is contained in:
advplyr 2021-10-06 13:00:12 -05:00
parent 19dcb6173e
commit 75aede914f
7 changed files with 19 additions and 14 deletions

View File

@ -69,7 +69,7 @@ export default {
return { return {
...track, ...track,
relativePath: trackPath.replace(audiobookPath, '') relativePath: trackPath.replace(audiobookPath, '').replace(/%/g, '%25').replace(/#/g, '%23')
} }
}) })
}, },

View File

@ -75,7 +75,7 @@ export default {
return { return {
...track, ...track,
relativePath: trackPath.replace(audiobookPath, '') relativePath: trackPath.replace(audiobookPath, '').replace(/%/g, '%25').replace(/#/g, '%23')
} }
}) })
}, },

View File

@ -163,6 +163,7 @@ export default {
if (!download || !download.audiobookId) { if (!download || !download.audiobookId) {
return console.error('Invalid download object', download) return console.error('Invalid download object', download)
} }
var audiobook = this.$store.getters['audiobooks/getAudiobook'](download.audiobookId) var audiobook = this.$store.getters['audiobooks/getAudiobook'](download.audiobookId)
if (!audiobook) { if (!audiobook) {
return console.error('Audiobook not found for download', download) return console.error('Audiobook not found for download', download)

View File

@ -113,6 +113,7 @@ export default {
console.error('No audiobook...', params.id) console.error('No audiobook...', params.id)
return redirect('/') return redirect('/')
} }
store.commit('audiobooks/addUpdate', audiobook)
return { return {
audiobook audiobook
} }

View File

@ -1,6 +1,5 @@
import { sort } from '@/assets/fastSort' import { sort } from '@/assets/fastSort'
import { decode } from '@/plugins/init.client' import { decode } from '@/plugins/init.client'
import Path from 'path'
const STANDARD_GENRES = ['Adventure', 'Autobiography', 'Biography', 'Childrens', 'Comedy', 'Crime', 'Dystopian', 'Fantasy', 'Fiction', 'Health', 'History', 'Horror', 'Mystery', 'New Adult', 'Nonfiction', 'Philosophy', 'Politics', 'Religion', 'Romance', 'Sci-Fi', 'Self-Help', 'Short Story', 'Technology', 'Thriller', 'True Crime', 'Western', 'Young Adult'] const STANDARD_GENRES = ['Adventure', 'Autobiography', 'Biography', 'Childrens', 'Comedy', 'Crime', 'Dystopian', 'Fantasy', 'Fiction', 'Health', 'History', 'Horror', 'Mystery', 'New Adult', 'Nonfiction', 'Philosophy', 'Politics', 'Religion', 'Romance', 'Sci-Fi', 'Self-Help', 'Short Story', 'Technology', 'Thriller', 'True Crime', 'Western', 'Young Adult']
@ -138,15 +137,20 @@ export const getters = {
var bookLastUpdate = book.lastUpdate || Date.now() var bookLastUpdate = book.lastUpdate || Date.now()
var userToken = rootGetters['user/getToken'] var userToken = rootGetters['user/getToken']
cover = cover.replace(/\\/g, '/')
// Map old covers to new format /s/book/{bookid}/* // Map old covers to new format /s/book/{bookid}/*
if (cover.startsWith('\\local')) { if (cover.startsWith('/local')) {
cover = cover.replace('local', `s\\book\\${bookItem.id}`) cover = cover.replace('local', `s/book/${bookItem.id}`)
if (cover.includes(bookItem.path + '\\')) { // Remove book path if (cover.includes(bookItem.path + '/')) { // Remove book path
cover = cover.replace(bookItem.path + '\\', '') cover = cover.replace(bookItem.path + '/', '')
} }
} }
var url = new URL(cover, document.baseURI) // Easier to replace these special characters then to encodeUriComponent of the filename
var encodedCover = cover.replace(/%/g, '%25').replace(/#/g, '%23')
var url = new URL(encodedCover, document.baseURI)
return url.href + `?token=${userToken}&ts=${bookLastUpdate}` return url.href + `?token=${userToken}&ts=${bookLastUpdate}`
} catch (err) { } catch (err) {
console.error(err) console.error(err)
@ -243,6 +247,7 @@ export const mutations = {
}, },
addUpdate(state, audiobook) { addUpdate(state, audiobook) {
if (audiobook.libraryId !== state.loadedLibraryId) { if (audiobook.libraryId !== state.loadedLibraryId) {
console.warn('Invalid library', audiobook)
return return
} }

View File

@ -240,8 +240,8 @@ class DownloadManager {
} }
if (shouldIncludeCover) { if (shouldIncludeCover) {
var _cover = audiobook.book.cover var _cover = audiobook.book.coverFullPath
if (_cover.startsWith(Path.sep + 'local')) { if (!_cover && audiobook.book.cover && audiobook.book.cover.startsWith(Path.sep + 'local')) {
_cover = Path.join(this.AudiobookPath, _cover.replace(Path.sep + 'local', '')) _cover = Path.join(this.AudiobookPath, _cover.replace(Path.sep + 'local', ''))
Logger.debug('Local cover url', _cover) Logger.debug('Local cover url', _cover)
} }

View File

@ -140,8 +140,7 @@ class Server {
var folder = library.folders.find(fol => fol.id === req.params.folder) var folder = library.folders.find(fol => fol.id === req.params.folder)
if (!folder) return res.status(404).send('Folder not found') if (!folder) return res.status(404).send('Folder not found')
var remainingPath = decodeURIComponent(req.params['0']) var remainingPath = req.params['0']
var fullPath = Path.join(folder.fullPath, remainingPath) var fullPath = Path.join(folder.fullPath, remainingPath)
res.sendFile(fullPath) res.sendFile(fullPath)
}) })
@ -151,8 +150,7 @@ class Server {
var audiobook = this.audiobooks.find(ab => ab.id === req.params.id) var audiobook = this.audiobooks.find(ab => ab.id === req.params.id)
if (!audiobook) return res.status(404).send('Book not found with id ' + req.params.id) if (!audiobook) return res.status(404).send('Book not found with id ' + req.params.id)
var remainingPath = decodeURIComponent(req.params['0']) var remainingPath = req.params['0']
var fullPath = Path.join(audiobook.fullPath, remainingPath) var fullPath = Path.join(audiobook.fullPath, remainingPath)
res.sendFile(fullPath) res.sendFile(fullPath)
}) })