import React from 'react'; import styled from 'styled-components'; import { getMessageById, getMessagesByConversation } from '../../../data/data'; import { getConversationController } from '../../../session/conversations'; import { AttachmentDownloads } from '../../../session/utils'; import { updateConfirmModal } from '../../../state/ducks/modalDialog'; import { SessionIcon } from '../../session/icon'; import { SessionButtonColor } from '../../session/SessionButton'; const StyledTrustSenderUI = styled.div` padding-inline: var(--margins-xs); display: flex; align-items: center; `; const ClickToDownload = styled.div` cursor: pointer; padding: var(--margins-xs) var(--margins-md); white-space: nowrap; `; export const ClickToTrustSender = (props: { messageId: string }) => { const openConfirmationModal = async (e: any) => { e.stopPropagation(); e.preventDefault(); const found = await getMessageById(props.messageId); if (!found) { window.log.warn('message not found ClickToTrustSender'); return; } const sender = found.getSource(); const convo = getConversationController().get(sender); window.inboxStore?.dispatch( updateConfirmModal({ title: window.i18n( 'trustThisContactDialogTitle', convo.getContactProfileNameOrShortenedPubKey() ), message: window.i18n( 'trustThisContactDialogDescription', convo.getContactProfileNameOrShortenedPubKey() ), okTheme: SessionButtonColor.Green, onClickOk: async () => { convo.set({ isTrustedForAttachmentDownload: true }); await convo.commit(); const messagesInConvo = await getMessagesByConversation(convo.id, { limit: 100, }); await Promise.all( messagesInConvo.map(async message => { const msgAttachments = message.get('attachments'); const messagePreviews = message.get('preview'); if (message.get('direction') !== 'incoming') { return; } if ( (!msgAttachments || msgAttachments.length === 0) && (!messagePreviews || messagePreviews.length === 0) ) { return; } const downloadedAttachments = await Promise.all( msgAttachments.map(async (attachment: any, index: any) => { if (attachment.path) { return { ...attachment, pending: false }; } return AttachmentDownloads.addJob(attachment, { messageId: message.id, type: 'attachment', index, isOpenGroupV2: false, openGroupV2Details: undefined, }); }) ); const preview = await Promise.all( (messagePreviews || []).map(async (item: any, index: any) => { if (!item.image) { return item; } const image = message.isTrustedForAttachmentDownload() ? await AttachmentDownloads.addJob(item.image, { messageId: message.id, type: 'preview', index, isOpenGroupV2: false, openGroupV2Details: undefined, }) : null; return { ...item, image }; }) ); message.set({ preview }); message.set({ attachments: downloadedAttachments }); await message.commit(); }) ); }, }) ); }; return ( {window.i18n('clickToTrustContact')} ); };