diff --git a/src/global.d.ts b/src/global.d.ts new file mode 100644 index 0000000..4875d09 --- /dev/null +++ b/src/global.d.ts @@ -0,0 +1,55 @@ +declare module '*.vue' { + import Vue from 'vue' + export default Vue +} + +declare module "md5-es"; + +interface Navigator { + readonly mediaSession?: MediaSession; +} + +interface Window { + MediaSession?: MediaSession; +} + +type MediaSessionPlaybackState = 'none' | 'paused' | 'playing'; + +type MediaSessionAction = 'play' | 'pause' | 'seekbackward' | 'seekforward' | 'seekto' | 'previoustrack' | 'nexttrack' | 'skipad' | 'stop'; + +interface MediaSessionActionDetails { + action: MediaSessionAction; + fastSeek?: boolean; + seekOffset?: number; + seekTime?: number; +} + +interface MediaPositionState { + duration?: number; + playbackRate?: number; + position?: number; +} + +interface MediaSession { + playbackState: MediaSessionPlaybackState; + metadata: MediaMetadata | null; + setActionHandler(action: MediaSessionAction, listener: ((details: MediaSessionActionDetails) => void)): void; + setPositionState?(arg: MediaPositionState): void; +} + +interface MediaImage { + src: string; + sizes?: string; + type?: string; +} + +interface MediaMetadataInit { + title?: string; + artist?: string; + album?: string; + artwork?: MediaImage[]; +} + +declare class MediaMetadata { + constructor(init?: MediaMetadataInit); +} diff --git a/src/library/TrackList.vue b/src/library/TrackList.vue index 1402595..bcf0ee8 100644 --- a/src/library/TrackList.vue +++ b/src/library/TrackList.vue @@ -97,15 +97,14 @@ export default Vue.extend({ }), }, methods: { - ...mapMutations({ + ...mapActions({ playPause: "player/playPause", }), play(index: number) { if ((this.tracks as any)[index].id === this.playingTrackId) { - this.$store.commit("player/playPause") - return; + return this.$store.dispatch("player/playPause") } - this.$store.dispatch('player/play', { + return this.$store.dispatch('player/playQueue', { index, queue: this.tracks, }) diff --git a/src/main.ts b/src/main.ts index 13b9433..f19a635 100644 --- a/src/main.ts +++ b/src/main.ts @@ -10,7 +10,7 @@ import {setupRouter} from '@/shared/router' import {setupStore} from '@/shared/store' import { API } from '@/shared/api'; import { AuthService } from '@/auth/service'; -import { connectAudioToStore } from './player/store' +import { setupAudio } from './player/store' declare module 'vue/types/vue' { interface Vue { @@ -28,7 +28,7 @@ const authService = new AuthService(); const api = new API(authService); const router = setupRouter(authService); const store = setupStore(authService, api); -connectAudioToStore(store); +setupAudio(store); Vue.prototype.$auth = authService; Vue.prototype.$api = api; diff --git a/src/player/Player.vue b/src/player/Player.vue index 17d7d33..37d7330 100644 --- a/src/player/Player.vue +++ b/src/player/Player.vue @@ -75,20 +75,16 @@ export default Vue.extend({ ]), }, methods: { - ...mapMutations("player", [ - "playPause", - ]), ...mapActions("player", [ + "playPause", "playNext", "playPrevious", ]), seek(event: any) { if (event.target) { const width = event.target.clientWidth; - const value = event.offsetX / width - this.$store.commit("player/seek", value) - // this.internalValue = e.offsetX / width * 100 - + const value = event.offsetX / width; + return this.$store.dispatch("player/seek", value); } } } diff --git a/src/player/Queue.vue b/src/player/Queue.vue index 7d5729e..5f8b77f 100644 --- a/src/player/Queue.vue +++ b/src/player/Queue.vue @@ -11,7 +11,7 @@