Message / Round Video: Fix progressive loading
This commit is contained in:
parent
cc453696af
commit
6b3c779974
@ -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<OwnProps> = ({
|
||||
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<boolean>(false);
|
||||
const [progress, setProgress] = useState<number>(0);
|
||||
@ -201,19 +202,16 @@ const RoundVideo: FC<OwnProps> = ({
|
||||
loop={!isActivated}
|
||||
playsInline
|
||||
onEnded={isActivated ? stopPlaying : undefined}
|
||||
// eslint-disable-next-line react/jsx-props-no-spreading
|
||||
{...bufferingHandlers}
|
||||
onTimeUpdate={isActivated ? handleTimeUpdate : undefined}
|
||||
onReady={markPlayerReady}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
{withThumb && (
|
||||
<canvas
|
||||
ref={thumbRef}
|
||||
className={buildClassName('thumbnail', thumbClassNames)}
|
||||
style={`width: ${ROUND_VIDEO_DIMENSIONS_PX}px; height: ${ROUND_VIDEO_DIMENSIONS_PX}px`}
|
||||
/>
|
||||
)}
|
||||
<canvas
|
||||
ref={thumbRef}
|
||||
className={buildClassName('thumbnail', thumbClassNames)}
|
||||
style={`width: ${ROUND_VIDEO_DIMENSIONS_PX}px; height: ${ROUND_VIDEO_DIMENSIONS_PX}px`}
|
||||
/>
|
||||
<div className="progress" ref={playingProgressRef} />
|
||||
{shouldSpinnerRender && (
|
||||
<div className={`media-loading ${spinnerClassNames}`}>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user