diff --git a/src/app/components/RenderMessageContent.tsx b/src/app/components/RenderMessageContent.tsx index c29628e..49fdf00 100644 --- a/src/app/components/RenderMessageContent.tsx +++ b/src/app/components/RenderMessageContent.tsx @@ -23,8 +23,9 @@ import { ThumbnailContent, UnsupportedContent, VideoContent, + VideoFrameThumbnail, } from './message'; -import { UrlPreviewCard, UrlPreviewHolder, YouTubeEmbed, isYouTubeUrl } from './url-preview'; +import { UrlPreviewCard, UrlPreviewHolder, YouTubeEmbed, isYouTubeUrl, TikTokEmbed, isTikTokUrl } from './url-preview'; import { Image, MediaControl, Video } from './media'; import { ImageViewer } from './image-viewer'; import { PdfViewer } from './Pdf-viewer'; @@ -66,16 +67,21 @@ export function RenderMessageContent({ filteredUrls = filterDisabledUrls(filteredUrls, disabledEmbedPatterns ?? []); if (filteredUrls.length === 0) return undefined; - // Separate YouTube URLs from other URLs + // Separate special URLs from generic ones const youtubeUrls = filteredUrls.filter(isYouTubeUrl); - const otherUrls = filteredUrls.filter((url) => !isYouTubeUrl(url)); + const tiktokUrls = filteredUrls.filter(isTikTokUrl); + const otherUrls = filteredUrls.filter((url) => !isYouTubeUrl(url) && !isTikTokUrl(url)); return ( <> - {/* Render YouTube embeds (ad-free via Piped) */} + {/* Render YouTube embeds (ad-free via yt-dlp) */} {youtubeUrls.map((url) => ( ))} + {/* Render TikTok embeds */} + {tiktokUrls.map((url) => ( + + ))} {/* Render standard URL previews for other links */} {otherUrls.length > 0 && ( @@ -227,26 +233,47 @@ export function RenderMessageContent({ ( - ( - ( - {body} - )} - /> - ) - : undefined - } - renderVideo={(p) =>