diff --git a/lib/media/media-utils.js b/lib/media/media-utils.js --- a/lib/media/media-utils.js +++ b/lib/media/media-utils.js @@ -7,6 +7,7 @@ MultimediaMessageInfo, RawMultimediaMessageInfo, } from '../types/message-types.js'; +import { isBlobServiceURI } from '../utils/blob-service.js'; const maxDimensions = Object.freeze({ width: 1920, height: 1920 }); @@ -36,6 +37,15 @@ return `some ${firstType}s`; } +function isMediaBlobServiceHosted(media: Media): boolean { + return ( + (!!media.uri && isBlobServiceURI(media.uri)) || + (!!media.holder && isBlobServiceURI(media.holder)) || + (!!media.thumbnailURI && isBlobServiceURI(media.thumbnailURI)) || + (!!media.thumbnailHolder && isBlobServiceURI(media.thumbnailHolder)) + ); +} + function multimediaMessagePreview( messageInfo: MultimediaMessageInfo | RawMultimediaMessageInfo, ): string { @@ -59,5 +69,6 @@ contentStringForMediaArray, multimediaMessagePreview, isLocalUploadID, + isMediaBlobServiceHosted, getNextLocalUploadID, }; diff --git a/lib/shared/messages/multimedia-message-spec.js b/lib/shared/messages/multimedia-message-spec.js --- a/lib/shared/messages/multimedia-message-spec.js +++ b/lib/shared/messages/multimedia-message-spec.js @@ -10,6 +10,7 @@ } from './message-spec.js'; import { joinResult } from './utils.js'; import { + isMediaBlobServiceHosted, contentStringForMediaArray, multimediaMessagePreview, } from '../../media/media-utils.js'; @@ -209,14 +210,24 @@ return rawMessageInfo; } + const containsBlobServiceMedia = rawMessageInfo.media.some( + isMediaBlobServiceHosted, + ); const containsEncryptedMedia = rawMessageInfo.media.some( media => media.type === 'encrypted_photo' || media.type === 'encrypted_video', ); - if (!containsEncryptedMedia && hasMinCodeVersion(platformDetails, 158)) { + if ( + !containsBlobServiceMedia && + !containsEncryptedMedia && + hasMinCodeVersion(platformDetails, 158) + ) { + return rawMessageInfo; + } + if (!containsBlobServiceMedia && hasMinCodeVersion(platformDetails, 205)) { return rawMessageInfo; } - if (hasMinCodeVersion(platformDetails, 205)) { + if (hasMinCodeVersion(platformDetails, 209)) { return rawMessageInfo; } @@ -254,7 +265,11 @@ }), }; } else if (unwrapped.type === messageTypes.MULTIMEDIA) { - for (const { type } of unwrapped.media) { + for (const media of unwrapped.media) { + if (isMediaBlobServiceHosted(media)) { + return messageInfo; + } + const { type } = media; if ( type !== 'photo' && type !== 'video' &&