Skip to content

Commit

Permalink
feat: add media session (wip)
Browse files Browse the repository at this point in the history
  • Loading branch information
remvze committed May 11, 2024
1 parent ea0dfff commit df1b05f
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 30 deletions.
Binary file added public/sounds/2-seconds-of-silence.mp3
Binary file not shown.
34 changes: 21 additions & 13 deletions src/components/app/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -86,20 +86,28 @@ export function App() {
return [...favorites, ...categories];
}, [favoriteSounds, categories]);

useMediaSession();
const audio = useMediaSession();

return (
<SnackbarProvider>
<StoreConsumer>
<Container>
<div id="app" />
<Buttons />
<Categories categories={allCategories} />
</Container>

<Toolbar />
<SharedModal />
</StoreConsumer>
</SnackbarProvider>
<>
<SnackbarProvider>
<StoreConsumer>
<Container>
<div id="app" />
<Buttons />
<Categories categories={allCategories} />
</Container>

<Toolbar />
<SharedModal />
</StoreConsumer>
</SnackbarProvider>

<audio
aria-hidden={true}
ref={audio}
src="/sounds/2-seconds-of-silence.mp3"
/>
</>
);
}
31 changes: 14 additions & 17 deletions src/hooks/use-media-session.ts
Original file line number Diff line number Diff line change
@@ -1,31 +1,28 @@
import { useEffect } from 'react';
import { useEffect, useRef } from 'react';

import { useSoundStore } from '@/store';

export function useMediaSession() {
const play = useSoundStore(state => state.play);
const pause = useSoundStore(state => state.pause);
const isPlaying = useSoundStore(state => state.isPlaying);
const ref = useRef<HTMLAudioElement | null>(null);

useEffect(() => {
try {
navigator.mediaSession.setActionHandler('play', play);
navigator.mediaSession.setActionHandler('pause', pause);
navigator.mediaSession.setActionHandler('stop', pause);
} catch (error) {
console.log('Media session is no supported yet');
}
}, [play, pause]);
const isPlaying = useSoundStore(state => state.isPlaying);

useEffect(() => {
if (isPlaying) {
navigator.mediaSession.metadata = new MediaMetadata({
title: 'Moodist',
});
ref.current?.play().then(() => {
console.log('hi');
navigator.mediaSession.metadata = new MediaMetadata({
title: 'Moodist',
});

navigator.mediaSession.playbackState = 'playing';
navigator.mediaSession.playbackState = 'playing';
});
} else {
ref.current?.pause();

navigator.mediaSession.playbackState = 'paused';
}
}, [isPlaying]);

return ref;
}

0 comments on commit df1b05f

Please sign in to comment.