diff --git a/src/app/components/RenderMessageContent.tsx b/src/app/components/RenderMessageContent.tsx index 2457e5e3..4cfcb7dc 100644 --- a/src/app/components/RenderMessageContent.tsx +++ b/src/app/components/RenderMessageContent.tsx @@ -209,13 +209,11 @@ export function RenderMessageContent({ ( + renderVideoContent={({ body, info, ...props }) => ( ( diff --git a/src/app/components/message/MsgTypeRenderers.tsx b/src/app/components/message/MsgTypeRenderers.tsx index 15c95ddf..a40ecae1 100644 --- a/src/app/components/message/MsgTypeRenderers.tsx +++ b/src/app/components/message/MsgTypeRenderers.tsx @@ -224,6 +224,8 @@ type RenderVideoContentProps = { mimeType: string; url: string; encInfo?: IEncryptedFile; + markedAsSpoiler?: boolean; + spoilerReason?: string; }; type MVideoProps = { content: IVideoContent; @@ -274,6 +276,8 @@ export function MVideo({ content, renderAsFile, renderVideoContent, outlined }: mimeType: safeMimeType, url: mxcUrl, encInfo: content.file, + markedAsSpoiler: content[MATRIX_SPOILER_PROPERTY_NAME], + spoilerReason: content[MATRIX_SPOILER_REASON_PROPERTY_NAME], })} diff --git a/src/app/components/message/content/ImageContent.tsx b/src/app/components/message/content/ImageContent.tsx index cc0c0c91..84e3709e 100644 --- a/src/app/components/message/content/ImageContent.tsx +++ b/src/app/components/message/content/ImageContent.tsx @@ -214,7 +214,7 @@ export const ImageContent = as<'div', ImageContentProps>( )} {(srcState.status === AsyncStatus.Loading || srcState.status === AsyncStatus.Success) && !load && - !markedAsSpoiler && ( + !blurred && ( diff --git a/src/app/components/message/content/VideoContent.tsx b/src/app/components/message/content/VideoContent.tsx index 3b613803..52073ac1 100644 --- a/src/app/components/message/content/VideoContent.tsx +++ b/src/app/components/message/content/VideoContent.tsx @@ -3,6 +3,7 @@ import { Badge, Box, Button, + Chip, Icon, Icons, Spinner, @@ -47,6 +48,8 @@ type VideoContentProps = { info: IVideoInfo & IThumbnailContent; encInfo?: EncryptedAttachmentInfo; autoPlay?: boolean; + markedAsSpoiler?: boolean; + spoilerReason?: string; renderThumbnail?: () => ReactNode; renderVideo: (props: RenderVideoProps) => ReactNode; }; @@ -60,6 +63,8 @@ export const VideoContent = as<'div', VideoContentProps>( info, encInfo, autoPlay, + markedAsSpoiler, + spoilerReason, renderThumbnail, renderVideo, ...props @@ -72,6 +77,7 @@ export const VideoContent = as<'div', VideoContentProps>( const [load, setLoad] = useState(false); const [error, setError] = useState(false); + const [blurred, setBlurred] = useState(markedAsSpoiler ?? false); const [srcState, loadSrc] = useAsyncCallback( useCallback(async () => { @@ -114,11 +120,15 @@ export const VideoContent = as<'div', VideoContentProps>( /> )} {renderThumbnail && !load && ( - + {renderThumbnail()} )} - {!autoPlay && srcState.status === AsyncStatus.Idle && ( + {!autoPlay && !blurred && srcState.status === AsyncStatus.Idle && (