diff --git a/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.js b/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.js index 52f0a7555cfa5..0d83ea8ac926e 100644 --- a/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.js +++ b/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.js @@ -123,13 +123,18 @@ export default defineComponent({ type: String, default: null }, + currentPlaybackRate: { + type: Number, + default: 1 + }, }, emits: [ 'error', 'loaded', 'ended', 'timeupdate', - 'toggle-theatre-mode' + 'toggle-theatre-mode', + 'playback-rate-updated' ], setup: function (props, { emit, expose }) { const { locale, t } = useI18n() @@ -235,11 +240,6 @@ export default defineComponent({ }) }) - /** @type {import('vue').ComputedRef} */ - const defaultPlayback = computed(() => { - return store.getters.getDefaultPlayback - }) - /** @type {import('vue').ComputedRef} */ const defaultSkipInterval = computed(() => { return store.getters.getDefaultSkipInterval @@ -901,8 +901,8 @@ export default defineComponent({ // stop shaka-player's click handler firing event.stopPropagation() - video.value.playbackRate = defaultPlayback.value - video.value.defaultPlaybackRate = defaultPlayback.value + video.value.playbackRate = props.currentPlaybackRate + video.value.defaultPlaybackRate = props.currentPlaybackRate } } @@ -2310,8 +2310,8 @@ export default defineComponent({ videoElement.muted = (muted === 'true') } - videoElement.playbackRate = defaultPlayback.value - videoElement.defaultPlaybackRate = defaultPlayback.value + videoElement.playbackRate = props.currentPlaybackRate + videoElement.defaultPlaybackRate = props.currentPlaybackRate const localPlayer = new shaka.Player() @@ -2413,6 +2413,10 @@ export default defineComponent({ container.value.classList.add('no-cursor') await performFirstLoad() + + player.addEventListener('ratechange', () => { + emit('playback-rate-updated', player.getPlaybackRate()) + }) }) async function performFirstLoad() { diff --git a/src/renderer/views/Watch/Watch.js b/src/renderer/views/Watch/Watch.js index 91e7017ce42b0..6fb6b725a91b8 100644 --- a/src/renderer/views/Watch/Watch.js +++ b/src/renderer/views/Watch/Watch.js @@ -133,7 +133,8 @@ export default defineComponent({ customErrorIcon: null, videoGenreIsMusic: false, /** @type {Date|null} */ - streamingDataExpiryDate: null + streamingDataExpiryDate: null, + currentPlaybackRate: null, } }, computed: { @@ -304,6 +305,7 @@ export default defineComponent({ this.activeFormat = this.defaultVideoFormat this.checkIfTimestamp() + this.currentPlaybackRate = this.$store.getters.getDefaultPlayback }, mounted: function () { this.onMountedDependOnLocalStateLoading() @@ -1670,6 +1672,10 @@ export default defineComponent({ this.blockVideoAutoplay = false }, + updatePlaybackRate(newRate) { + this.currentPlaybackRate = newRate + }, + ...mapActions([ 'updateHistory', 'updateWatchProgress', diff --git a/src/renderer/views/Watch/Watch.vue b/src/renderer/views/Watch/Watch.vue index 42e2fd3d55bbf..d2c792227a8bb 100644 --- a/src/renderer/views/Watch/Watch.vue +++ b/src/renderer/views/Watch/Watch.vue @@ -34,12 +34,14 @@ :theatre-possible="theatrePossible" :use-theatre-mode="useTheatreMode" :vr-projection="vrProjection" + :current-playback-rate="currentPlaybackRate" class="videoPlayer" @error="handlePlayerError" @loaded="handleVideoLoaded" @timeupdate="updateCurrentChapter" @ended="handleVideoEnded" @toggle-theatre-mode="useTheatreMode = !useTheatreMode" + @playback-rate-updated="updatePlaybackRate" />