diff --git a/src/sentry.ts b/src/sentry.ts index 8d84b122a..22198dc25 100644 --- a/src/sentry.ts +++ b/src/sentry.ts @@ -26,6 +26,10 @@ async function startSentry(dsn: string): Promise { // localForage error in FireFox private browsing mode (which doesn't support IndexedDB). // We only use IndexedDB as a cache, so we can safely ignore the error. 'No available storage method found', + // Virtuoso throws these errors, but it is a false-positive. + // https://github.com/petyosi/react-virtuoso/issues/254 + 'ResizeObserver loop completed with undelivered notifications.', + 'ResizeObserver loop limit exceeded', ], denyUrls: [ // Browser extensions. @@ -34,8 +38,6 @@ async function startSentry(dsn: string): Promise { /^moz-extension:\/\//i, ], - // We recommend adjusting this value in production, or using tracesSampler - // for finer control tracesSampleRate: 1.0, }); diff --git a/src/utils/sounds.ts b/src/utils/sounds.ts index 331aed064..fddba87c7 100644 --- a/src/utils/sounds.ts +++ b/src/utils/sounds.ts @@ -19,7 +19,7 @@ const createAudio = (sources: Sound[]): HTMLAudioElement => { }; /** Play HTML5 sound. */ -const play = (audio: HTMLAudioElement): void => { +const play = (audio: HTMLAudioElement): Promise => { if (!audio.paused) { audio.pause(); if (typeof audio.fastSeek === 'function') { @@ -29,7 +29,15 @@ const play = (audio: HTMLAudioElement): void => { } } - audio.play(); + return audio.play().catch((error: Error) => { + if (error.name === 'NotAllowedError') { + // User has disabled autoplay. + // https://developer.mozilla.org/en-US/docs/Web/Media/Autoplay_guide + return; + } else { + throw error; + } + }); }; const soundCache: Record = {