diff --git a/src/components/middle/message/RoundVideo.tsx b/src/components/middle/message/RoundVideo.tsx index 82a68859d..d42d35d6a 100644 --- a/src/components/middle/message/RoundVideo.tsx +++ b/src/components/middle/message/RoundVideo.tsx @@ -11,7 +11,7 @@ import type { ApiMessage } from '../../../api/types'; import { ApiMediaFormat } from '../../../api/types'; import { ROUND_VIDEO_DIMENSIONS_PX } from '../../common/helpers/mediaDimensions'; -import { getMessageMediaFormat, getMessageMediaHash } from '../../../global/helpers'; +import { getMessageMediaFormat, getMessageMediaHash, getMessageMediaThumbDataUri } from '../../../global/helpers'; import { formatMediaDuration } from '../../../util/dateFormat'; import buildClassName from '../../../util/buildClassName'; import { stopCurrentAudio } from '../../../util/audioPlayer'; @@ -23,7 +23,7 @@ import useMediaWithLoadProgress from '../../../hooks/useMediaWithLoadProgress'; import useShowTransition from '../../../hooks/useShowTransition'; import useMediaTransition from '../../../hooks/useMediaTransition'; import usePrevious from '../../../hooks/usePrevious'; -import useBuffering from '../../../hooks/useBuffering'; +import useFlag from '../../../hooks/useFlag'; import useBlurredMediaThumbRef from './hooks/useBlurredMediaThumbRef'; import ProgressSpinner from '../../ui/ProgressSpinner'; @@ -75,18 +75,19 @@ const RoundVideo: FC = ({ lastSyncTime, ); - const [withThumb] = useState(!mediaData); - const thumbRef = useBlurredMediaThumbRef(message, mediaData); + const [isPlayerReady, markPlayerReady] = useFlag(); + const hasThumb = Boolean(getMessageMediaThumbDataUri(message)); + const noThumb = !hasThumb || isPlayerReady; + const thumbRef = useBlurredMediaThumbRef(message, noThumb); + const thumbClassNames = useMediaTransition(!noThumb); - const { isBuffered, bufferingHandlers } = useBuffering(); - const isTransferring = (isLoadAllowed && !isBuffered) || isDownloading; + const isTransferring = (isLoadAllowed && !isPlayerReady) || isDownloading; const wasLoadDisabled = usePrevious(isLoadAllowed) === false; - const thumbClassNames = useMediaTransition(!mediaData); const { shouldRender: shouldSpinnerRender, transitionClassNames: spinnerClassNames, - } = useShowTransition(isTransferring || !isBuffered, undefined, wasLoadDisabled); + } = useShowTransition(isTransferring, undefined, wasLoadDisabled); const [isActivated, setIsActivated] = useState(false); const [progress, setProgress] = useState(0); @@ -201,19 +202,16 @@ const RoundVideo: FC = ({ loop={!isActivated} playsInline onEnded={isActivated ? stopPlaying : undefined} - // eslint-disable-next-line react/jsx-props-no-spreading - {...bufferingHandlers} onTimeUpdate={isActivated ? handleTimeUpdate : undefined} + onReady={markPlayerReady} /> )} - {withThumb && ( - - )} +
{shouldSpinnerRender && (