diff --git a/components/readers/Reader.vue b/components/readers/Reader.vue index 695f1432..5744fc45 100644 --- a/components/readers/Reader.vue +++ b/components/readers/Reader.vue @@ -89,15 +89,18 @@ export default { }, ebookUrl() { if (!this.ebookFile) return null + let filepath = '' + if (this.selectedLibraryItem.isFile) { + filepath = this.$encodeUriPath(this.ebookFile.metadata.filename) + } else { + const itemRelPath = this.selectedLibraryItem.relPath + if (itemRelPath.startsWith('/')) itemRelPath = itemRelPath.slice(1) + const relPath = this.ebookFile.metadata.relPath + if (relPath.startsWith('/')) relPath = relPath.slice(1) - var itemRelPath = this.selectedLibraryItem.relPath - if (itemRelPath.startsWith('/')) itemRelPath = itemRelPath.slice(1) - - var relPath = this.ebookFile.metadata.relPath - if (relPath.startsWith('/')) relPath = relPath.slice(1) - - var serverAddress = this.$store.getters['user/getServerAddress'] - return `${serverAddress}/ebook/${this.libraryId}/${this.folderId}/${itemRelPath}/${relPath}` + filepath = this.$encodeUriPath(`${itemRelPath}/${relPath}`) + } + return `/ebook/${this.libraryId}/${this.folderId}/${filepath}` }, playerLibraryItemId() { return this.$store.state.playerLibraryItemId diff --git a/plugins/init.client.js b/plugins/init.client.js index 331e00b8..f77d6f15 100644 --- a/plugins/init.client.js +++ b/plugins/init.client.js @@ -16,6 +16,9 @@ if (Capacitor.getPlatform() != 'web') { Vue.prototype.$isDev = process.env.NODE_ENV !== 'production' +Vue.prototype.$encodeUriPath = (path) => { + return path.replace(/\\/g, '/').replace(/%/g, '%25').replace(/#/g, '%23') +} Vue.prototype.$dateDistanceFromNow = (unixms) => { if (!unixms) return '' return formatDistance(unixms, Date.now(), { addSuffix: true })