initiation librodrome

This commit is contained in:
Yvv
2026-02-20 12:55:10 +01:00
commit 35e2897a73
208 changed files with 18951 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
export function useMediaSession() {
const store = usePlayerStore()
const { togglePlayPause, playNext, playPrev, seek } = useAudioPlayer()
function updateMediaSession() {
if (!('mediaSession' in navigator)) return
if (!store.currentSong) return
navigator.mediaSession.metadata = new MediaMetadata({
title: store.currentSong.title,
artist: store.currentSong.artist,
album: 'Une économie du don — enfin concevable',
artwork: store.currentSong.coverImage
? [{ src: store.currentSong.coverImage, sizes: '512x512', type: 'image/jpeg' }]
: [],
})
navigator.mediaSession.setActionHandler('play', () => togglePlayPause())
navigator.mediaSession.setActionHandler('pause', () => togglePlayPause())
navigator.mediaSession.setActionHandler('previoustrack', () => playPrev())
navigator.mediaSession.setActionHandler('nexttrack', () => playNext())
navigator.mediaSession.setActionHandler('seekto', (details) => {
if (details.seekTime != null) seek(details.seekTime)
})
}
function updatePositionState() {
if (!('mediaSession' in navigator)) return
if (!store.currentSong || store.duration === 0) return
try {
navigator.mediaSession.setPositionState({
duration: store.duration,
playbackRate: 1,
position: Math.min(store.currentTime, store.duration),
})
}
catch {
// Ignore errors from invalid position state
}
}
// Watch for song changes
watch(() => store.currentSong, () => {
updateMediaSession()
})
// Update position periodically
watch(() => store.currentTime, () => {
updatePositionState()
})
// Update playback state
watch(() => store.isPlaying, (playing) => {
if ('mediaSession' in navigator) {
navigator.mediaSession.playbackState = playing ? 'playing' : 'paused'
}
})
return {
updateMediaSession,
}
}