Update:Scale chapter times with playback rate #726

This commit is contained in:
advplyr 2023-06-01 17:36:52 -05:00
parent b067a2d3d5
commit c093548b71
3 changed files with 18 additions and 8 deletions

View file

@ -95,7 +95,7 @@
</div>
</div>
<modals-chapters-modal v-model="showChapterModal" :current-chapter="currentChapter" :chapters="chapters" @select="selectChapter" />
<modals-chapters-modal v-model="showChapterModal" :current-chapter="currentChapter" :chapters="chapters" :playback-rate="currentPlaybackRate" @select="selectChapter" />
<modals-dialog v-model="showMoreMenuDialog" :items="menuItems" @action="clickMenuAction" />
</div>
</template>

View file

@ -7,14 +7,14 @@
</template>
<div class="w-full h-full overflow-hidden absolute top-0 left-0 flex items-center justify-center" @click="show = false">
<div ref="container" class="w-full overflow-x-hidden overflow-y-auto bg-primary rounded-lg border border-white border-opacity-20" style="max-height: 75%" @click.stop>
<div ref="container" class="w-full overflow-x-hidden overflow-y-auto bg-secondary rounded-lg border border-white border-opacity-20" style="max-height: 75%" @click.stop>
<ul class="h-full w-full" role="listbox" aria-labelledby="listbox-label">
<template v-for="(chapter, index) in chapters">
<li :key="chapter.id" :id="`chapter-row-${chapter.id}`" class="text-gray-50 select-none relative py-4 cursor-pointer hover:bg-black-400" :class="currentChapterId === chapter.id ? 'bg-bg bg-opacity-80' : ''" role="option" @click="clickedOption(chapter)">
<li :key="chapter.id" :id="`chapter-row-${chapter.id}`" class="text-gray-50 select-none relative py-4 cursor-pointer" :class="currentChapterId === chapter.id ? 'bg-primary bg-opacity-80' : ''" role="option" @click="clickedOption(chapter)">
<div class="relative flex items-center pl-3 pr-20">
<p class="font-normal block truncate text-sm text-white text-opacity-80">{{ index + 1 }} - {{ chapter.title }}</p>
<div class="absolute top-0 right-3 -mt-0.5">
<span class="font-mono text-white text-opacity-90 leading-3 text-sm" style="letter-spacing: -0.5px">{{ $secondsToTimestamp(chapter.start) }}</span>
<span class="font-mono text-white text-opacity-90 leading-3 text-sm" style="letter-spacing: -0.5px">{{ $secondsToTimestamp(chapter.start / _playbackRate) }}</span>
</div>
</div>
@ -38,7 +38,8 @@ export default {
currentChapter: {
type: Object,
default: () => null
}
},
playbackRate: Number
},
data() {
return {}
@ -57,11 +58,15 @@ export default {
this.$emit('input', val)
}
},
_playbackRate() {
if (!this.playbackRate || isNaN(this.playbackRate)) return 1
return this.playbackRate
},
currentChapterId() {
return this.currentChapter ? this.currentChapter.id : null
return this.currentChapter?.id || null
},
currentChapterTitle() {
return this.currentChapter ? this.currentChapter.title : null
return this.currentChapter?.title || null
}
},
methods: {

View file

@ -13,6 +13,7 @@ class AbsAudioPlayerWeb extends WebPlugin {
this.playWhenReady = false
this.playableMimeTypes = {}
this.playbackSession = null
this.playbackRate = 1
this.audioTracks = []
this.startTime = 0
this.trackStartTime = 0
@ -53,9 +54,11 @@ class AbsAudioPlayerWeb extends WebPlugin {
}
// PluginMethod
async prepareLibraryItem({ libraryItemId, episodeId, playWhenReady, startTime }) {
async prepareLibraryItem({ libraryItemId, episodeId, playWhenReady, startTime, playbackRate }) {
console.log('[AbsAudioPlayer] Prepare library item', libraryItemId)
if (!isNaN(playbackRate) && playbackRate) this.playbackRate = playbackRate
if (libraryItemId.startsWith('local_')) {
// Fetch Local - local not implemented on web
} else {
@ -134,6 +137,7 @@ class AbsAudioPlayerWeb extends WebPlugin {
// PluginMethod
setPlaybackSpeed({ value }) {
this.playbackRate = value
if (this.player) this.player.playbackRate = value
}
@ -229,6 +233,7 @@ class AbsAudioPlayerWeb extends WebPlugin {
this.player.src = `${vuexStore.getters['user/getServerAddress']}${this.currentTrack.contentUrl}?token=${vuexStore.getters['user/getToken']}`
console.log(`[AbsAudioPlayer] Loading track src ${this.player.src}`)
this.player.load()
this.player.playbackRate = this.playbackRate
}
setAudioPlayer(playbackSession, playWhenReady = false) {