diff --git a/web/input/input-state-container.react.js b/web/input/input-state-container.react.js --- a/web/input/input-state-container.react.js +++ b/web/input/input-state-container.react.js @@ -32,6 +32,7 @@ useModalContext, type PushModal, } from 'lib/components/modal-provider.react.js'; +import commStaffCommunity from 'lib/facts/comm-staff-community.js'; import { getNextLocalUploadID } from 'lib/media/media-utils.js'; import { pendingToRealizedThreadIDsSelector } from 'lib/selectors/thread-selectors.js'; import { @@ -46,6 +47,7 @@ threadIsPending, threadIsPendingSidebar, patchThreadInfoToIncludeMentionedMembersOfParent, + threadInfoInsideCommunity, } from 'lib/shared/thread-utils.js'; import type { CalendarQuery } from 'lib/types/entry-types.js'; import type { @@ -71,6 +73,7 @@ type ClientNewThreadRequest, type NewThreadResult, type ThreadInfo, + type RawThreadInfo, threadTypes, } from 'lib/types/thread-types.js'; import { @@ -106,6 +109,7 @@ +drafts: { +[key: string]: string }, +viewerID: ?string, +messageStoreMessages: { +[id: string]: RawMessageInfo }, + +threadStoreThreadInfos: { +[id: string]: RawThreadInfo }, +pendingRealizedThreadIDs: $ReadOnlyMap, +dispatch: Dispatch, +dispatchActionPromise: DispatchActionPromise, @@ -163,8 +167,6 @@ }; replyCallbacks: Array<(message: string) => void> = []; pendingThreadCreations = new Map>(); - // TODO: we want to send encrypted media if thread is in the Comm community - sendEncryptedMedia: boolean = false; // When the user sends a multimedia message that triggers the creation of a // sidebar, the sidebar gets created right away, but the message needs to wait @@ -330,7 +332,7 @@ creatorID, media, }, - { forceMultimediaMessageType: this.sendEncryptedMedia }, + { forceMultimediaMessageType: this.shouldEncryptMedia(threadID) }, ); newMessageInfos.set(messageID, messageInfo); } @@ -374,6 +376,14 @@ return rawMessageInfo; } + shouldEncryptMedia(threadID: ?string): boolean { + if (!threadID) { + return false; + } + const threadInfo = this.props.threadStoreThreadInfos[threadID]; + return threadInfoInsideCommunity(threadInfo, commStaffCommunity.id); + } + async sendMultimediaMessage(messageInfo: RawMultimediaMessageInfo) { if (!threadIsPending(messageInfo.threadID)) { this.props.dispatchActionPromise( @@ -632,7 +642,7 @@ const { pushModal } = this.props; const appendResults = await Promise.all( - files.map(file => this.appendFile(file, selectionTime)), + files.map(file => this.appendFile(threadID, file, selectionTime)), ); if (appendResults.some(({ result }) => !result.success)) { @@ -682,6 +692,7 @@ } async appendFile( + threadID: ?string, file: File, selectTime: number, ): Promise<{ @@ -723,7 +734,7 @@ const { uri, file: fixedFile, mediaType, dimensions } = result; let encryptionResult; - if (this.sendEncryptedMedia) { + if (this.shouldEncryptMedia(threadID)) { let encryptionResponse; const encryptionStart = Date.now(); try { @@ -1502,6 +1513,9 @@ const messageStoreMessages = useSelector( state => state.messageStore.messages, ); + const threadStoreThreadInfos = useSelector( + state => state.threadStore.threadInfos, + ); const pendingToRealizedThreadIDs = useSelector(state => pendingToRealizedThreadIDsSelector(state.threadStore.threadInfos), ); @@ -1541,6 +1555,7 @@ drafts={drafts} viewerID={viewerID} messageStoreMessages={messageStoreMessages} + threadStoreThreadInfos={threadStoreThreadInfos} pendingRealizedThreadIDs={pendingToRealizedThreadIDs} calendarQuery={calendarQuery} uploadMultimedia={callUploadMultimedia}