From 1d4a3468ee4897965d8361cf5c15a1eaadd537c2 Mon Sep 17 00:00:00 2001 From: wvffle Date: Fri, 29 Jul 2022 11:29:08 +0000 Subject: [PATCH] Revert "Rewrite player logic" This reverts commit ec630a234ab5ea0dccddaf06c462536bbf1ed329. --- front/package.json | 2 - front/src/components/Queue.vue | 61 +-- .../src/components/audio/ChannelEntryCard.vue | 4 +- front/src/components/audio/PlayButton.vue | 2 +- front/src/components/audio/Player.vue | 108 ++--- front/src/components/audio/VolumeControl.vue | 16 +- .../components/audio/podcast/MobileRow.vue | 4 +- .../src/components/audio/track/MobileRow.vue | 4 +- front/src/components/audio/track/Row.vue | 4 +- front/src/composables/audio/usePlayOptions.ts | 33 +- front/src/composables/audio/usePlayer.ts | 265 ++++++++++++ front/src/composables/audio/useQueue.ts | 110 +++-- front/src/composables/audio/useSound.ts | 160 ++++++++ front/src/composables/audio/useSoundCache.ts | 38 ++ .../src/composables/audio/useTrackSources.ts | 18 +- .../composables/audio/useWebAudioPlayer.ts | 377 ------------------ front/src/init/mediaSession.ts | 11 +- front/src/store/index.ts | 68 ++-- front/src/store/player.ts | 130 ++++-- front/src/store/queue.ts | 211 +++------- front/yarn.lock | 26 +- 21 files changed, 859 insertions(+), 793 deletions(-) create mode 100644 front/src/composables/audio/usePlayer.ts create mode 100644 front/src/composables/audio/useSound.ts create mode 100644 front/src/composables/audio/useSoundCache.ts delete mode 100644 front/src/composables/audio/useWebAudioPlayer.ts diff --git a/front/package.json b/front/package.json index 19cda8790..3b0b8e075 100644 --- a/front/package.json +++ b/front/package.json @@ -35,7 +35,6 @@ "howler": "2.2.3", "js-logger": "1.6.1", "lodash-es": "4.17.21", - "lru-cache": "^7.13.1", "mavon-editor": "^3.0.0-beta", "moment": "2.29.4", "qs": "6.11.0", @@ -43,7 +42,6 @@ "sanitize-html": "2.7.1", "sass": "1.54.0", "showdown": "2.1.0", - "standardized-audio-context": "^25.3.29", "text-clipper": "2.2.0", "tiptap-markdown": "^0.5.0", "transliteration": "2.3.5", diff --git a/front/src/components/Queue.vue b/front/src/components/Queue.vue index 759f8a0f9..7d82055f5 100644 --- a/front/src/components/Queue.vue +++ b/front/src/components/Queue.vue @@ -11,7 +11,7 @@ import TrackPlaylistIcon from '~/components/playlists/TrackPlaylistIcon.vue' import { whenever, watchDebounced, useCurrentElement, useScrollLock } from '@vueuse/core' import { useGettext } from 'vue3-gettext' import useQueue from '~/composables/audio/useQueue' -import useWebAudioPlayer from '~/composables/audio/useWebAudioPlayer' +import usePlayer from '~/composables/audio/usePlayer' import VirtualList from '~/components/vui/list/VirtualList.vue' import QueueItem from '~/components/QueueItem.vue' @@ -24,32 +24,32 @@ const scrollLock = useScrollLock(document.body) const store = useStore() const { + playing, + loading: isLoadingAudio, + errored, + duration, + durationFormatted, + currentTimeFormatted, + progress, + bufferProgress, + currentTime, + pause, + resume +} = usePlayer() + +const { + currentTrack, + hasNext, isEmpty: emptyQueue, tracks, reorder, endsIn: timeLeft, + currentIndex, removeTrack, - clear -} = useQueue() - -const currentIndex = computed(() => store.state.queue.currentIndex) -const currentTrack = computed(() => store.state.queue.tracks[currentIndex.value]) -const hasNext = computed(() => store.getters['queue/hasNext']) -const durationFormatted = computed(() => time.parse(Math.floor(duration.value))) -const currentTimeFormatted = computed(() => time.parse(Math.floor(currentTime.value))) - -const { - play, - pause, + clear, next, - previous, - playing, - errored, - progress, - duration, - time: currentTime, - loading: isLoadingAudio -} = useWebAudioPlayer() + previous +} = useQueue() const labels = computed(() => ({ queue: $pgettext('*/*/*', 'Queue'), @@ -105,12 +105,13 @@ router.beforeEach(() => store.commit('ui/queueFocused', null)) const progressBar = ref() const touchProgress = (event: MouseEvent) => { - const percent = (event.clientX - ((event.target as Element).closest('.progress')?.getBoundingClientRect().left ?? 0)) / progressBar.value.offsetWidth - progress.value = percent * 100 + const time = ((event.clientX - (event.target as Element).getBoundingClientRect().left) / progressBar.value.offsetWidth) * duration.value + currentTime.value = time } -const playIndex = (index: number) => { - store.state.queue.currentIndex = index +const play = (index: unknown) => { + store.dispatch('queue/currentIndex', index as number) + resume() } const getCover = (track: Track) => { @@ -254,8 +255,12 @@ const reorderTracks = async (from: number, to: number) => {
+
{ :title="labels.play" :aria-label="labels.play" class="control" - @click.prevent.stop="play" + @click.prevent.stop="resume" > @@ -390,7 +395,7 @@ const reorderTracks = async (from: number, to: number) => { :index="index" :source="item" :class="[...classList, currentIndex === index && 'active']" - @play="playIndex" + @play="play" @remove="removeTrack" /> diff --git a/front/src/components/audio/ChannelEntryCard.vue b/front/src/components/audio/ChannelEntryCard.vue index 1e0dde091..cbe9abeae 100644 --- a/front/src/components/audio/ChannelEntryCard.vue +++ b/front/src/components/audio/ChannelEntryCard.vue @@ -4,7 +4,7 @@ import type { Cover, Track } from '~/types' import PlayButton from '~/components/audio/PlayButton.vue' import TrackFavoriteIcon from '~/components/favorites/TrackFavoriteIcon.vue' import useQueue from '~/composables/audio/useQueue' -import useWebAudioPlayer from '~/composables/audio/useWebAudioPlayer' +import usePlayer from '~/composables/audio/usePlayer' import { computed } from 'vue' interface Props { @@ -16,7 +16,7 @@ interface Props { const props = defineProps() const { currentTrack } = useQueue() -const { playing } = useWebAudioPlayer() +const { playing } = usePlayer() const cover = computed(() => props.entry.cover ?? null) const duration = computed(() => props.entry.uploads.find(upload => upload.duration)?.duration ?? null) diff --git a/front/src/components/audio/PlayButton.vue b/front/src/components/audio/PlayButton.vue index 9dc98186b..d2575cf6c 100644 --- a/front/src/components/audio/PlayButton.vue +++ b/front/src/components/audio/PlayButton.vue @@ -155,7 +155,7 @@ const openMenu = () => { data-ref="enqueue" :disabled="!playable" :title="labels.addToQueue" - @click.stop.prevent="enqueue()" + @click.stop.prevent="enqueue" > Add to queue diff --git a/front/src/components/audio/Player.vue b/front/src/components/audio/Player.vue index d4d6a991b..3c3123dc0 100644 --- a/front/src/components/audio/Player.vue +++ b/front/src/components/audio/Player.vue @@ -1,7 +1,5 @@