Changeset View
Changeset View
Standalone View
Standalone View
lib/shared/messages/multimedia-message-spec.js
// @flow | // @flow | ||||
import invariant from 'invariant'; | import invariant from 'invariant'; | ||||
import { | import { | ||||
pushTypes, | pushTypes, | ||||
type MessageSpec, | type MessageSpec, | ||||
type MessageTitleParam, | type MessageTitleParam, | ||||
type RawMessageInfoFromServerDBRowParams, | type RawMessageInfoFromServerDBRowParams, | ||||
} from './message-spec.js'; | } from './message-spec.js'; | ||||
import { joinResult } from './utils.js'; | import { joinResult } from './utils.js'; | ||||
import { | import { | ||||
isMediaBlobServiceHosted, | |||||
contentStringForMediaArray, | contentStringForMediaArray, | ||||
multimediaMessagePreview, | multimediaMessagePreview, | ||||
} from '../../media/media-utils.js'; | } from '../../media/media-utils.js'; | ||||
import type { PlatformDetails } from '../../types/device-types.js'; | import type { PlatformDetails } from '../../types/device-types.js'; | ||||
import { | import { | ||||
assertMessageType, | assertMessageType, | ||||
messageTypes, | messageTypes, | ||||
} from '../../types/message-types-enum.js'; | } from '../../types/message-types-enum.js'; | ||||
Show All 23 Lines | |||||
import type { RelativeUserInfo } from '../../types/user-types.js'; | import type { RelativeUserInfo } from '../../types/user-types.js'; | ||||
import { ET } from '../../utils/entity-text.js'; | import { ET } from '../../utils/entity-text.js'; | ||||
import { | import { | ||||
translateClientDBMediaInfosToMedia, | translateClientDBMediaInfosToMedia, | ||||
translateClientDBMediaInfoToImage, | translateClientDBMediaInfoToImage, | ||||
} from '../../utils/message-ops-utils.js'; | } from '../../utils/message-ops-utils.js'; | ||||
import { createMediaMessageInfo } from '../message-utils.js'; | import { createMediaMessageInfo } from '../message-utils.js'; | ||||
import { threadIsGroupChat } from '../thread-utils.js'; | import { threadIsGroupChat } from '../thread-utils.js'; | ||||
import { hasMinCodeVersion } from '../version-utils.js'; | import { FUTURE_CODE_VERSION, hasMinCodeVersion } from '../version-utils.js'; | ||||
export const multimediaMessageSpec: MessageSpec< | export const multimediaMessageSpec: MessageSpec< | ||||
MediaMessageData | ImagesMessageData, | MediaMessageData | ImagesMessageData, | ||||
RawMediaMessageInfo | RawImagesMessageInfo, | RawMediaMessageInfo | RawImagesMessageInfo, | ||||
MediaMessageInfo | ImagesMessageInfo, | MediaMessageInfo | ImagesMessageInfo, | ||||
> = Object.freeze({ | > = Object.freeze({ | ||||
messageContentForServerDB( | messageContentForServerDB( | ||||
data: | data: | ||||
▲ Show 20 Lines • Show All 147 Lines • ▼ Show 20 Lines | > = Object.freeze({ | ||||
shimUnsupportedMessageInfo( | shimUnsupportedMessageInfo( | ||||
rawMessageInfo: RawMediaMessageInfo | RawImagesMessageInfo, | rawMessageInfo: RawMediaMessageInfo | RawImagesMessageInfo, | ||||
platformDetails: ?PlatformDetails, | platformDetails: ?PlatformDetails, | ||||
): RawMediaMessageInfo | RawImagesMessageInfo | RawUnsupportedMessageInfo { | ): RawMediaMessageInfo | RawImagesMessageInfo | RawUnsupportedMessageInfo { | ||||
if (rawMessageInfo.type === messageTypes.IMAGES) { | if (rawMessageInfo.type === messageTypes.IMAGES) { | ||||
return rawMessageInfo; | return rawMessageInfo; | ||||
} | } | ||||
const containsBlobServiceMedia = rawMessageInfo.media.some( | |||||
isMediaBlobServiceHosted, | |||||
); | |||||
const containsEncryptedMedia = rawMessageInfo.media.some( | const containsEncryptedMedia = rawMessageInfo.media.some( | ||||
media => | media => | ||||
media.type === 'encrypted_photo' || media.type === 'encrypted_video', | media.type === 'encrypted_photo' || media.type === 'encrypted_video', | ||||
); | ); | ||||
if (!containsEncryptedMedia && hasMinCodeVersion(platformDetails, 158)) { | if ( | ||||
!containsBlobServiceMedia && | |||||
!containsEncryptedMedia && | |||||
hasMinCodeVersion(platformDetails, 158) | |||||
) { | |||||
return rawMessageInfo; | return rawMessageInfo; | ||||
} | } | ||||
if (hasMinCodeVersion(platformDetails, 205)) { | if (!containsBlobServiceMedia && hasMinCodeVersion(platformDetails, 205)) { | ||||
return rawMessageInfo; | |||||
} | |||||
if (hasMinCodeVersion(platformDetails, FUTURE_CODE_VERSION)) { | |||||
return rawMessageInfo; | return rawMessageInfo; | ||||
} | } | ||||
const { id } = rawMessageInfo; | const { id } = rawMessageInfo; | ||||
invariant(id !== null && id !== undefined, 'id should be set on server'); | invariant(id !== null && id !== undefined, 'id should be set on server'); | ||||
return { | return { | ||||
type: messageTypes.UNSUPPORTED, | type: messageTypes.UNSUPPORTED, | ||||
id, | id, | ||||
Show All 21 Lines | if (unwrapped.type === messageTypes.IMAGES) { | ||||
dimensions, | dimensions, | ||||
'only four photos were uploaded before dimensions were calculated, ' + | 'only four photos were uploaded before dimensions were calculated, ' + | ||||
`and ${media.id} was not one of them`, | `and ${media.id} was not one of them`, | ||||
); | ); | ||||
return { ...media, dimensions }; | return { ...media, dimensions }; | ||||
}), | }), | ||||
}; | }; | ||||
} else if (unwrapped.type === messageTypes.MULTIMEDIA) { | } 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 ( | if ( | ||||
type !== 'photo' && | type !== 'photo' && | ||||
type !== 'video' && | type !== 'video' && | ||||
type !== 'encrypted_photo' && | type !== 'encrypted_photo' && | ||||
type !== 'encrypted_video' | type !== 'encrypted_video' | ||||
) { | ) { | ||||
return messageInfo; | return messageInfo; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 71 Lines • Show Last 20 Lines |