playlists support v1
This commit is contained in:
@@ -7,11 +7,12 @@ export const usePlayerStore = defineStore('player', {
|
||||
state: () => ({
|
||||
currentTrack: null as Track | null,
|
||||
position: 0,
|
||||
audio: null as HTMLAudioElement | null,
|
||||
audio: null as HTMLAudioElement | null
|
||||
}),
|
||||
|
||||
actions: {
|
||||
async playTrack(track: Track) {
|
||||
const oldTrack = this.currentTrack
|
||||
this.currentTrack = track
|
||||
|
||||
// toggle si on reclique sur la même
|
||||
@@ -24,21 +25,20 @@ export const usePlayerStore = defineStore('player', {
|
||||
}
|
||||
|
||||
// définir la source (fichier de la compilation entière)
|
||||
this.audio.src = this.getCompilationUrlFromTrack(track)
|
||||
this.audio.load()
|
||||
|
||||
// attendre que le player soit prêt avant de lire
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
const onCanPlay = () => {
|
||||
this.audio!.removeEventListener("canplay", onCanPlay)
|
||||
this.audio!.removeEventListener('canplay', onCanPlay)
|
||||
resolve()
|
||||
}
|
||||
const onError = (e: Event) => {
|
||||
this.audio!.removeEventListener("error", onError)
|
||||
this.audio!.removeEventListener('error', onError)
|
||||
reject(e)
|
||||
}
|
||||
this.audio!.addEventListener("canplay", onCanPlay, { once: true })
|
||||
this.audio!.addEventListener("error", onError, { once: true })
|
||||
this.audio!.addEventListener('canplay', onCanPlay, { once: true })
|
||||
this.audio!.addEventListener('error', onError, { once: true })
|
||||
})
|
||||
|
||||
// positionner le début
|
||||
@@ -48,24 +48,23 @@ export const usePlayerStore = defineStore('player', {
|
||||
try {
|
||||
await this.audio.play()
|
||||
} catch (err) {
|
||||
console.error("Impossible de lire la piste :", err)
|
||||
console.error('Impossible de lire la piste :', err)
|
||||
}
|
||||
},
|
||||
|
||||
togglePlay() {
|
||||
if (!this.audio) return
|
||||
if (this.audio.paused) {
|
||||
this.audio.play().catch(err => console.error(err))
|
||||
this.audio.play().catch((err) => console.error(err))
|
||||
} else {
|
||||
this.audio.pause()
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
getters: {
|
||||
isCurrentCompilation: (state) => {
|
||||
return (compilationId: string) =>
|
||||
compilationId === state.currentTrack?.compilationId
|
||||
return (compilationId: string) => compilationId === state.currentTrack?.compilationId
|
||||
},
|
||||
|
||||
isPlayingTrack: (state) => {
|
||||
@@ -85,15 +84,8 @@ export const usePlayerStore = defineStore('player', {
|
||||
|
||||
getCurrentTrack: (state) => state.currentTrack,
|
||||
|
||||
getCompilationUrlFromTrack: () => {
|
||||
return (track: Track) =>
|
||||
`https://files.erudi.fr/evilspins/${track.compilationId}.mp3`
|
||||
},
|
||||
|
||||
getCurrentCompilation: (state) => {
|
||||
return state.currentTrack
|
||||
? state.getCompilationUrlFromTrack(state.currentTrack)
|
||||
: null
|
||||
return state.currentTrack ? state.currentTrack.url : null
|
||||
},
|
||||
|
||||
getTrackStop: (state) => {
|
||||
@@ -109,5 +101,5 @@ export const usePlayerStore = defineStore('player', {
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user