Sticker View: Fix displaying preview for unsupported video

This commit is contained in:
Alexander Zinchuk 2024-09-06 15:43:01 +02:00
parent 3c1248b471
commit 45b81c104a

View File

@ -104,19 +104,14 @@ const StickerView: FC<OwnProps> = ({
hasIntersectedForPlayingRef.current = true; hasIntersectedForPlayingRef.current = true;
} }
const isReadyToMountFullMedia = useMountAfterHeavyAnimation(hasIntersectedForPlayingRef.current);
const cachedPreview = mediaLoader.getFromMemory(previewMediaHash); const cachedPreview = mediaLoader.getFromMemory(previewMediaHash);
const shouldLoadPreview = !customColor && !cachedPreview && ( const isReadyToMountFullMedia = useMountAfterHeavyAnimation(hasIntersectedForPlayingRef.current);
!isReadyToMountFullMedia || isUnsupportedVideo || (isStatic ? isSmall : noPlay) const shouldForcePreview = isUnsupportedVideo || (isStatic ? isSmall : noPlay);
); const shouldLoadPreview = !customColor && !cachedPreview && (!isReadyToMountFullMedia || shouldForcePreview);
const previewMediaData = useMedia(previewMediaHash, !shouldLoadPreview); const previewMediaData = useMedia(previewMediaHash, !shouldLoadPreview);
const shouldSkipFullMedia = Boolean(shouldForcePreview || (
const thumbDataUri = useThumbnail(sticker); fullMediaHash === previewMediaHash && (cachedPreview || previewMediaData)
const thumbData = cachedPreview || previewMediaData || thumbDataUri; ));
// No need to use full media if preview is enough and available
const shouldSkipFullMedia = Boolean(fullMediaHash === previewMediaHash && (cachedPreview || previewMediaData));
const fullMediaData = useMedia(fullMediaHash || `sticker${id}`, !shouldLoad || shouldSkipFullMedia); const fullMediaData = useMedia(fullMediaHash || `sticker${id}`, !shouldLoad || shouldSkipFullMedia);
// If Lottie data is loaded we will only render thumb if it's good enough (from preview) // If Lottie data is loaded we will only render thumb if it's good enough (from preview)
const [isPlayerReady, markPlayerReady] = useFlag(Boolean(isLottie && fullMediaData && !previewMediaData)); const [isPlayerReady, markPlayerReady] = useFlag(Boolean(isLottie && fullMediaData && !previewMediaData));
@ -124,6 +119,8 @@ const StickerView: FC<OwnProps> = ({
const shouldRenderFullMedia = isReadyToMountFullMedia && fullMediaData; const shouldRenderFullMedia = isReadyToMountFullMedia && fullMediaData;
const isFullMediaReady = isReadyToMountFullMedia && fullMediaData && (isStatic || isPlayerReady); const isFullMediaReady = isReadyToMountFullMedia && fullMediaData && (isStatic || isPlayerReady);
const thumbDataUri = useThumbnail(sticker);
const thumbData = cachedPreview || previewMediaData || thumbDataUri;
const isThumbOpaque = sharedCanvasRef && !withTranslucentThumb; const isThumbOpaque = sharedCanvasRef && !withTranslucentThumb;
const thumbClassNames = useMediaTransition(thumbData && !isFullMediaReady); const thumbClassNames = useMediaTransition(thumbData && !isFullMediaReady);
const fullMediaClassNames = useMediaTransition(isFullMediaReady); const fullMediaClassNames = useMediaTransition(isFullMediaReady);