mirror of
https://github.com/owncast/owncast.git
synced 2024-11-22 21:03:19 +03:00
Add error boundary to player. For #2811
This commit is contained in:
parent
868893340e
commit
11a11e64ad
1 changed files with 22 additions and 9 deletions
|
@ -3,6 +3,7 @@ import { useRecoilState, useRecoilValue } from 'recoil';
|
||||||
import { useHotkeys } from 'react-hotkeys-hook';
|
import { useHotkeys } from 'react-hotkeys-hook';
|
||||||
import { VideoJsPlayerOptions } from 'video.js';
|
import { VideoJsPlayerOptions } from 'video.js';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
|
import { ErrorBoundary } from 'react-error-boundary';
|
||||||
import { VideoJS } from '../VideoJS/VideoJS';
|
import { VideoJS } from '../VideoJS/VideoJS';
|
||||||
import ViewerPing from '../viewer-ping';
|
import ViewerPing from '../viewer-ping';
|
||||||
import { VideoPoster } from '../VideoPoster/VideoPoster';
|
import { VideoPoster } from '../VideoPoster/VideoPoster';
|
||||||
|
@ -13,6 +14,7 @@ import createVideoSettingsMenuButton from '../settings-menu';
|
||||||
import LatencyCompensator from '../latencyCompensator';
|
import LatencyCompensator from '../latencyCompensator';
|
||||||
import styles from './OwncastPlayer.module.scss';
|
import styles from './OwncastPlayer.module.scss';
|
||||||
import { VideoSettingsServiceContext } from '../../../services/video-settings-service';
|
import { VideoSettingsServiceContext } from '../../../services/video-settings-service';
|
||||||
|
import { ComponentError } from '../../ui/ComponentError/ComponentError';
|
||||||
|
|
||||||
const PLAYER_VOLUME = 'owncast_volume';
|
const PLAYER_VOLUME = 'owncast_volume';
|
||||||
const LATENCY_COMPENSATION_ENABLED = 'latencyCompensatorEnabled';
|
const LATENCY_COMPENSATION_ENABLED = 'latencyCompensatorEnabled';
|
||||||
|
@ -300,18 +302,29 @@ export const OwncastPlayer: FC<OwncastPlayerProps> = ({
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={classNames(styles.container, className)} id="player">
|
<ErrorBoundary
|
||||||
{online && (
|
// eslint-disable-next-line react/no-unstable-nested-components
|
||||||
<div className={styles.player}>
|
fallbackRender={({ error, resetErrorBoundary }) => (
|
||||||
<VideoJS options={videoJsOptions} onReady={handlePlayerReady} aria-label={title} />
|
<ComponentError
|
||||||
</div>
|
componentName="OwncastPlayer"
|
||||||
|
message={error.message}
|
||||||
|
retryFunction={resetErrorBoundary}
|
||||||
|
/>
|
||||||
)}
|
)}
|
||||||
<div className={styles.poster}>
|
>
|
||||||
{!videoPlaying && (
|
<div className={classNames(styles.container, className)} id="player">
|
||||||
<VideoPoster online={online} initialSrc="/thumbnail.jpg" src="/thumbnail.jpg" />
|
{online && (
|
||||||
|
<div className={styles.player}>
|
||||||
|
<VideoJS options={videoJsOptions} onReady={handlePlayerReady} aria-label={title} />
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
|
<div className={styles.poster}>
|
||||||
|
{!videoPlaying && (
|
||||||
|
<VideoPoster online={online} initialSrc="/thumbnail.jpg" src="/thumbnail.jpg" />
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</ErrorBoundary>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default OwncastPlayer;
|
export default OwncastPlayer;
|
||||||
|
|
Loading…
Reference in a new issue