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 { ApiMediaFormat } from '../../../api/types';
|
||||||
|
|
||||||
import { ROUND_VIDEO_DIMENSIONS_PX } from '../../common/helpers/mediaDimensions';
|
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 { formatMediaDuration } from '../../../util/dateFormat';
|
||||||
import buildClassName from '../../../util/buildClassName';
|
import buildClassName from '../../../util/buildClassName';
|
||||||
import { stopCurrentAudio } from '../../../util/audioPlayer';
|
import { stopCurrentAudio } from '../../../util/audioPlayer';
|
||||||
@ -23,7 +23,7 @@ import useMediaWithLoadProgress from '../../../hooks/useMediaWithLoadProgress';
|
|||||||
import useShowTransition from '../../../hooks/useShowTransition';
|
import useShowTransition from '../../../hooks/useShowTransition';
|
||||||
import useMediaTransition from '../../../hooks/useMediaTransition';
|
import useMediaTransition from '../../../hooks/useMediaTransition';
|
||||||
import usePrevious from '../../../hooks/usePrevious';
|
import usePrevious from '../../../hooks/usePrevious';
|
||||||
import useBuffering from '../../../hooks/useBuffering';
|
import useFlag from '../../../hooks/useFlag';
|
||||||
import useBlurredMediaThumbRef from './hooks/useBlurredMediaThumbRef';
|
import useBlurredMediaThumbRef from './hooks/useBlurredMediaThumbRef';
|
||||||
|
|
||||||
import ProgressSpinner from '../../ui/ProgressSpinner';
|
import ProgressSpinner from '../../ui/ProgressSpinner';
|
||||||
@ -75,18 +75,19 @@ const RoundVideo: FC<OwnProps> = ({
|
|||||||
lastSyncTime,
|
lastSyncTime,
|
||||||
);
|
);
|
||||||
|
|
||||||
const [withThumb] = useState(!mediaData);
|
const [isPlayerReady, markPlayerReady] = useFlag();
|
||||||
const thumbRef = useBlurredMediaThumbRef(message, mediaData);
|
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 && !isPlayerReady) || isDownloading;
|
||||||
const isTransferring = (isLoadAllowed && !isBuffered) || isDownloading;
|
|
||||||
const wasLoadDisabled = usePrevious(isLoadAllowed) === false;
|
const wasLoadDisabled = usePrevious(isLoadAllowed) === false;
|
||||||
|
|
||||||
const thumbClassNames = useMediaTransition(!mediaData);
|
|
||||||
const {
|
const {
|
||||||
shouldRender: shouldSpinnerRender,
|
shouldRender: shouldSpinnerRender,
|
||||||
transitionClassNames: spinnerClassNames,
|
transitionClassNames: spinnerClassNames,
|
||||||
} = useShowTransition(isTransferring || !isBuffered, undefined, wasLoadDisabled);
|
} = useShowTransition(isTransferring, undefined, wasLoadDisabled);
|
||||||
|
|
||||||
const [isActivated, setIsActivated] = useState<boolean>(false);
|
const [isActivated, setIsActivated] = useState<boolean>(false);
|
||||||
const [progress, setProgress] = useState<number>(0);
|
const [progress, setProgress] = useState<number>(0);
|
||||||
@ -201,19 +202,16 @@ const RoundVideo: FC<OwnProps> = ({
|
|||||||
loop={!isActivated}
|
loop={!isActivated}
|
||||||
playsInline
|
playsInline
|
||||||
onEnded={isActivated ? stopPlaying : undefined}
|
onEnded={isActivated ? stopPlaying : undefined}
|
||||||
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
||||||
{...bufferingHandlers}
|
|
||||||
onTimeUpdate={isActivated ? handleTimeUpdate : undefined}
|
onTimeUpdate={isActivated ? handleTimeUpdate : undefined}
|
||||||
|
onReady={markPlayerReady}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{withThumb && (
|
<canvas
|
||||||
<canvas
|
ref={thumbRef}
|
||||||
ref={thumbRef}
|
className={buildClassName('thumbnail', thumbClassNames)}
|
||||||
className={buildClassName('thumbnail', thumbClassNames)}
|
style={`width: ${ROUND_VIDEO_DIMENSIONS_PX}px; height: ${ROUND_VIDEO_DIMENSIONS_PX}px`}
|
||||||
style={`width: ${ROUND_VIDEO_DIMENSIONS_PX}px; height: ${ROUND_VIDEO_DIMENSIONS_PX}px`}
|
/>
|
||||||
/>
|
|
||||||
)}
|
|
||||||
<div className="progress" ref={playingProgressRef} />
|
<div className="progress" ref={playingProgressRef} />
|
||||||
{shouldSpinnerRender && (
|
{shouldSpinnerRender && (
|
||||||
<div className={`media-loading ${spinnerClassNames}`}>
|
<div className={`media-loading ${spinnerClassNames}`}>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user