Page MenuHomePhorge

D7170.1768793577.diff
No OneTemporary

Size
7 KB
Referenced Files
None
Subscribers
None

D7170.1768793577.diff

diff --git a/lib/utils/message-ops-utils.js b/lib/utils/message-ops-utils.js
--- a/lib/utils/message-ops-utils.js
+++ b/lib/utils/message-ops-utils.js
@@ -1,16 +1,16 @@
// @flow
-import invariant from 'invariant';
import _keyBy from 'lodash/fp/keyBy.js';
import { messageID } from '../shared/message-utils.js';
import { messageSpecs } from '../shared/messages/message-specs.js';
import type {
+ EncryptedVideo,
Media,
ClientDBMediaInfo,
Image,
Video,
-} from '../types/media-types.js';
+} from '../types/media-types';
import {
type ClientDBMessageInfo,
type RawMessageInfo,
@@ -26,28 +26,39 @@
): $ReadOnlyArray<ClientDBMediaInfo> {
const clientDBMediaInfos = [];
for (const m of media) {
- invariant(
- m.type === 'photo' || m.type === 'video',
- 'unimplemented media type',
- );
+ const type =
+ m.type === 'encrypted_photo'
+ ? 'photo'
+ : m.type === 'encrypted_video'
+ ? 'video'
+ : m.type;
+
+ const mediaURI =
+ m.type === 'encrypted_photo' || m.type === 'encrypted_video'
+ ? m.holder
+ : m.uri;
clientDBMediaInfos.push({
id: m.id,
- uri: m.uri,
- type: m.type,
+ uri: mediaURI,
+ type: type,
extras: JSON.stringify({
dimensions: m.dimensions,
- loop: m.type === 'video' ? m.loop : false,
+ loop: type === 'video' ? m.loop : false,
local_media_selection: m.localMediaSelection,
+ encryption_key: m.encryptionKey,
}),
});
- if (m.type === 'video') {
+ if (m.type === 'video' || m.type === 'encrypted_video') {
+ const thumbnailURI =
+ m.type === 'encrypted_video' ? m.thumbnailHolder : m.thumbnailURI;
clientDBMediaInfos.push({
id: m.thumbnailID,
- uri: m.thumbnailURI,
+ uri: thumbnailURI,
type: 'photo',
extras: JSON.stringify({
dimensions: m.dimensions,
loop: false,
+ encryption_key: m.thumbnailEncryptionKey,
}),
});
}
@@ -103,18 +114,29 @@
const messageContent: $ReadOnlyArray<MediaMessageServerDBContent> =
JSON.parse(clientDBMessageInfo.content);
- const translatedMedia = [];
+ const translatedMedia: Media[] = [];
for (const media of messageContent) {
if (media.type === 'photo') {
const extras = JSON.parse(mediaMap[media.uploadID].extras);
- const { dimensions } = extras;
+ const { dimensions, encryption_key: encryptionKey } = extras;
- const image: Image = {
- id: media.uploadID,
- uri: mediaMap[media.uploadID].uri,
- type: 'photo',
- dimensions,
- };
+ let image;
+ if (encryptionKey) {
+ image = {
+ id: media.uploadID,
+ type: 'encrypted_photo',
+ holder: mediaMap[media.uploadID].uri,
+ dimensions,
+ encryptionKey,
+ };
+ } else {
+ image = {
+ id: media.uploadID,
+ type: 'photo',
+ uri: mediaMap[media.uploadID].uri,
+ dimensions,
+ };
+ }
translatedMedia.push(image);
} else if (media.type === 'video') {
const extras = JSON.parse(mediaMap[media.uploadID].extras);
@@ -122,20 +144,39 @@
dimensions,
loop,
local_media_selection: localMediaSelection,
+ encryption_key: encryptionKey,
} = extras;
- const video: Video = {
- id: media.uploadID,
- uri: mediaMap[media.uploadID].uri,
- type: 'video',
- dimensions,
- loop,
- thumbnailID: media.thumbnailUploadID,
- thumbnailURI: mediaMap[media.thumbnailUploadID].uri,
- };
- translatedMedia.push(
- localMediaSelection ? { ...video, localMediaSelection } : video,
- );
+ if (encryptionKey) {
+ const thumbnailEncryptionKey = JSON.parse(
+ mediaMap[media.thumbnailUploadID].extras,
+ ).encryption_key;
+ const video: EncryptedVideo = {
+ id: media.uploadID,
+ type: 'encrypted_video',
+ holder: mediaMap[media.uploadID].uri,
+ dimensions,
+ loop,
+ encryptionKey,
+ thumbnailID: media.thumbnailUploadID,
+ thumbnailHolder: mediaMap[media.thumbnailUploadID].uri,
+ thumbnailEncryptionKey,
+ };
+ translatedMedia.push(video);
+ } else {
+ const video: Video = {
+ id: media.uploadID,
+ uri: mediaMap[media.uploadID].uri,
+ type: 'video',
+ dimensions,
+ loop,
+ thumbnailID: media.thumbnailUploadID,
+ thumbnailURI: mediaMap[media.thumbnailUploadID].uri,
+ };
+ translatedMedia.push(
+ localMediaSelection ? { ...video, localMediaSelection } : video,
+ );
+ }
}
}
return translatedMedia;
diff --git a/lib/utils/message-ops-utils.test.js b/lib/utils/message-ops-utils.test.js
--- a/lib/utils/message-ops-utils.test.js
+++ b/lib/utils/message-ops-utils.test.js
@@ -444,3 +444,100 @@
rawMessageInfo.media,
);
});
+
+test('Test translateClientDBMediaInfosToMedia() with encrypted photo', () => {
+ const clientDBMessageInfo: ClientDBMessageInfo = {
+ id: 'local0',
+ local_id: 'local0',
+ thread: '90145',
+ user: '90134',
+ type: '15',
+ future_type: null,
+ time: '1665014145088',
+ content: '[{"type":"photo","uploadID":"localUpload0"}]',
+ media_infos: [
+ {
+ id: 'localUpload0',
+ uri: 'assets-library://asset/asset.jpeg?id=6F1BEA56-3875-474C-B3AF-B11DEDCBAFF2&ext=jpeg',
+ type: 'photo',
+ extras:
+ '{"dimensions":{"height":1010,"width":576},"loop":false,"encryption_key":"someKey"}',
+ },
+ ],
+ };
+ const rawMessageInfo = {
+ type: 15,
+ threadID: '90145',
+ creatorID: '90134',
+ time: 1665014145088,
+ media: [
+ {
+ id: 'localUpload0',
+ type: 'encrypted_photo',
+ holder:
+ 'assets-library://asset/asset.jpeg?id=6F1BEA56-3875-474C-B3AF-B11DEDCBAFF2&ext=jpeg',
+ encryptionKey: 'someKey',
+ dimensions: { height: 1010, width: 576 },
+ },
+ ],
+ localID: 'local0',
+ };
+ expect(translateClientDBMediaInfosToMedia(clientDBMessageInfo)).toStrictEqual(
+ rawMessageInfo.media,
+ );
+});
+
+test('Test translateClientDBMediaInfosToMedia() with encrypted video', () => {
+ const clientDBMessageInfo: ClientDBMessageInfo = {
+ id: 'local0',
+ local_id: 'local0',
+ thread: '90145',
+ user: '90134',
+ type: '15',
+ future_type: null,
+ time: '1665014145088',
+ content:
+ '[{"type":"video","uploadID":"localUpload0","thumbnailUploadID":"localUpload1"}]',
+ media_infos: [
+ {
+ id: 'localUpload0',
+ uri: 'assets-library://asset/asset.mov?id=6F1BEA56-3875-474C-B3AF-B11DEDCBAFF2&ext=mov',
+ type: 'video',
+ extras:
+ '{"dimensions":{"height":1010,"width":576},"loop":false,"encryption_key":"someVideoKey"}',
+ },
+ {
+ id: 'localUpload1',
+ uri: 'assets-library://asset/asset.jpeg?id=6F1BEA56-3875-474C-B3AF-B11DEDCBAFF2&ext=jpeg',
+ type: 'photo',
+ extras:
+ '{"dimensions":{"height":1010,"width":576},"loop":false,"encryption_key":"someThumbKey"}',
+ },
+ ],
+ };
+ const rawMessageInfo = {
+ type: 15,
+ threadID: '90145',
+ creatorID: '90134',
+ time: 1665014145088,
+ media: [
+ {
+ id: 'localUpload0',
+ type: 'encrypted_video',
+ holder:
+ 'assets-library://asset/asset.mov?id=6F1BEA56-3875-474C-B3AF-B11DEDCBAFF2&ext=mov',
+ encryptionKey: 'someVideoKey',
+ dimensions: { height: 1010, width: 576 },
+ loop: false,
+ thumbnailID: 'localUpload1',
+ thumbnailHolder:
+ 'assets-library://asset/asset.jpeg?id=6F1BEA56-3875-474C-B3AF-B11DEDCBAFF2&ext=jpeg',
+ thumbnailEncryptionKey: 'someThumbKey',
+ },
+ ],
+ localID: 'local0',
+ };
+ expect(translateClientDBMediaInfosToMedia(clientDBMessageInfo)).toStrictEqual(
+ rawMessageInfo.media,
+ );
+});

File Metadata

Mime Type
text/plain
Expires
Mon, Jan 19, 3:32 AM (8 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5954137
Default Alt Text
D7170.1768793577.diff (7 KB)

Event Timeline