playlists support v1
All checks were successful
Deploy App / build (push) Successful in 4m19s
Deploy App / deploy (push) Successful in 16s

This commit is contained in:
valere
2025-10-09 22:47:30 +02:00
parent c86e345117
commit e2c5693948
30 changed files with 620 additions and 554 deletions

View File

@@ -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', {
}
}
}
},
}
})