From f01a1dcaa96e2e009a310c2055c92eb49910bb68 Mon Sep 17 00:00:00 2001 From: plebeius Date: Wed, 26 Nov 2025 23:13:40 +0100 Subject: [PATCH] fix(media-utils): ignore blacklisted thumbnails some sites don't show thumbnails, so the backend-side thumbnail fetching needs to be disabled, or it might fetch non-thumbnails such as emojis --- src/lib/utils/media-utils.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/lib/utils/media-utils.ts b/src/lib/utils/media-utils.ts index 68a811fb..ec831b50 100644 --- a/src/lib/utils/media-utils.ts +++ b/src/lib/utils/media-utils.ts @@ -76,6 +76,23 @@ const KNOWN_IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp const KNOWN_VIDEO_EXTENSIONS = ['mp4', 'webm', 'mov', 'avi', 'mkv', 'flv', 'wmv', 'm4v']; const KNOWN_AUDIO_EXTENSIONS = ['mp3', 'wav', 'ogg', 'flac', 'aac', 'm4a', 'wma']; +// some sites don't show thumbnails, so the backend-side thumbnail fetching needs to be disabled, or it might fetch non-thumbnails such as emojis +const THUMBNAIL_BLACKLISTED_DOMAINS = ['twitter.com', 'x.com']; + +const isThumbnailDomainBlacklisted = (link: string | undefined): boolean => { + if (!link) { + return false; + } + + try { + const hostname = new URL(link).hostname.toLowerCase(); + return THUMBNAIL_BLACKLISTED_DOMAINS.some((domain) => hostname === domain || hostname.endsWith(`.${domain}`)); + } catch (error) { + console.error('Error parsing link while checking thumbnail blacklist:', error); + return false; + } +}; + export const getLinkMediaInfo = memoize( (link: string): CommentMediaInfo | undefined => { if (!isValidURL(link)) { @@ -195,6 +212,16 @@ export const getCommentMediaInfo = (link: string, thumbnailUrl: string, linkWidt } const linkInfo = link ? getLinkMediaInfo(link) : undefined; if (linkInfo) { + // Don't show thumbnails for blacklisted domains (e.g., Twitter/X) as they return non-thumbnail images like emojis + if (isThumbnailDomainBlacklisted(link)) { + return { + ...linkInfo, + thumbnail: undefined, + patternThumbnailUrl: undefined, + linkWidth, + linkHeight, + }; + } return { ...linkInfo, thumbnail: thumbnailUrl || linkInfo.thumbnail,